ssm权限管理系统2
创始人
2024-05-11 17:41:00
0

PageHelper

 

 直接使用maven在pom.xml中添加依赖就行

 在我们这个ssm管理项目中,已经添加了依赖包

 在Springp配置文件中配置拦截器插件

 

 正式使用

 我们只需要在调用dao的方法之前插入如下语句就行,也就是说在service层里面进行插入

当然了上面的pageNum与pageSize是我们从前端传过来的,我们需要通过这个fandAll方法传入

 

 然后去处理一下Controller控制器里面的代码

 这里我们去看一下PageInfo这个对象

 

 然后我们去处理一下前端页面

前端页面需要修改两个页面,一个是导航栏,订单查询的地方,需要传入页码与每一页显示的条路,否则会报错

 

然后去修改订单展示页面,也就是order-list.jsp页面

先来看数据展示的部分,之前传过来的是一个ordersList的属性,然后去访问,但是现在传过来的是一个PageInfo对象

改动位置:

 

 每页显示几条数据也需要改动

 在这个页面下面有一个js函数,我们可以去看一下

 根据这个页面记性修改

 下面把分页的代码做一些改动

其实,分页数据的改动,主要就是拿到PageInfo里面的属性信息

先来看首页,就是第一页 

 

 

 

中间展示页面

 

肯定采用的是jstl标签的形式获取,因为这部分不是固定的

 

 

 然后是尾页

这里直接贴上所有代码

 刚刚做下拉框页面展示的时候发现有点问题

这样修改一下,就可以获取了 

 下面说一下权限操作

表的结构分析与创建

下面直接上sql语句

CREATE TABLE users(
id varchar2(32) default SYS_GUID() PRIMARY KEY,
email VARCHAR2(50) UNIQUE NOT NULL,
username VARCHAR2(50),
PASSWORD VARCHAR2(50),
phoneNum VARCHAR2(20),
STATUS INT
)CREATE TABLE role(
id varchar2(32) default SYS_GUID() PRIMARY KEY,
roleName VARCHAR2(50) ,
roleDesc VARCHAR2(50)
)CREATE TABLE users_role(
userId varchar2(32),
roleId varchar2(32),
PRIMARY KEY(userId,roleId),
FOREIGN KEY (userId) REFERENCES users(id),
FOREIGN KEY (roleId) REFERENCES role(id)
)CREATE TABLE permission(
id varchar2(32) default SYS_GUID() PRIMARY KEY,
permissionName VARCHAR2(50) ,
url VARCHAR2(50)
)CREATE TABLE role_permission(
permissionId varchar2(32),
roleId varchar2(32),
PRIMARY KEY(permissionId,roleId),
FOREIGN KEY (permissionId) REFERENCES permission(id),
FOREIGN KEY (roleId) REFERENCES role(id)
)

 下面分别把上面表对应的实体类创建好

UserInfo

Role

 

Permission 

 

 Spring Security介绍

Spring提供的安全认证服务框架 

 

Spring Security快速入门

1.在pom.xml导入相关依赖

   

2.web.xml文件中创建filter

 加载spring-security.xml的核心配置文件

3.spring security核心配置文件配置

通过核心配置文件 

 spring-security.xml



 Spring Security使用数据库认证

 

 

 

 

使用Spring security来完成认证的流程

 登录代码实现1

 第一步:在pom.xml里面导入依赖

这里面的依赖基本上已经导入了

第二步:在web.xml 配置一下过滤器

服务器启动,加载配置文件

配置Spring的安全过滤器 

 

第三步:在resources里面引入spring-security.xml的配置文件


 下面去把Spring-security需要访问的service给做了

说白了这个认证器会去调用它默认的一个service对象

内部存在一个固定的方法

 

我们这个时候指明了这个UserServiceImpl对象的名字

 

但是现在dao层还没有对象存在,因为service还是通过dao来调用方法进行查询的,那我们去做一个关于User的dao接口

 下面重新修改一下service层里面的方法

来说一下,查看某个类的结构

 这个UserDetails类里面有一个User实现类

 因为Spring-security框架返回的对象是去找UserDetails,也就是它的接口实现对象

 

 

下面我们来运行一下代码

现在先在前端引入两个页面login.jsp与failer.jsp页面

 当服务器一启动,就会进入到我们登录页面,因为Spring-Security已经做了控制

 

下面说一下面对提交路径的问题

本来该去访问控制器的,然后这里控制器被Spring-security所替代了,所以就是去找之前配置的一个service 

 如果就按照以上配置去访问这个页面,会出现一个问题,我们在数据库里面插入几条用户信息

这里说一个小问题,就是字符串数据在插入的时候,要用单引号

我们在登录页面进行登录一下

 不管输入什么,都会提示一个403的forbidden,也就是说,权限错误

其实这里的问题,就是权限不够

去看一下配置文件

 

也就是用户名密码对了也没用 

 

我们追一下这个权限集合

 集合内部存储的数据就是如下,必须是它的子类

 我们看一下类的关系图就能找到这个类

现在去追一下这个类SimpleGrantedAuthority

 

 我们就在UserServiceImpl里面重写写了一个函数

 这个时候,我们要去

数据库里面存几个角色信息,再存之前我们再来分析一把

 

去修改一下dao层的查询方法

 

 现在去完善IRoleDao里面的方法

在做这个sql语句之前,先到数据库里面插入一些数据

 

 向用户表与角色表里面添加相应的信息

下面是角色表 

下面是用户表

 

 然后在插入关联表

 现在再去处理一下IRoleDao里面的查询语句

 然后再去处理Spring-security里面需要处理的service里面的代码

 同时,我们还要对密码进行一个加密处理

同时我们还必须清楚一点,就是用户有一个状态信息

 

那么怎么通过这个状态限制用户不被登录,我们还是去看一下User这个封装的用户对象,其实想一下都要去找这个User,因为spring-security这个安装框架去访问的用户对象的时候,就是去找UserDetails的实现类

现在去追一下User 这个类

这个类的内部也是给我们调用了一个相同的构造方法

 

 所以我们在service里面我们换一种构造方法来生成我们的User对象

也就是用上面这个,只不过enabled不在默认为true

 

然后现在来重新运行整个代码

 

package com.pxx.ssm.service.impl;import com.pxx.ssm.dao.IUserDao;
import com.pxx.ssm.domain.Role;
import com.pxx.ssm.domain.UserInfo;
import com.pxx.ssm.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.ArrayList;
import java.util.List;@Service("userService")
@Transactional
public class UserServiceImpl implements IUserService {@Autowiredprivate IUserDao userDao;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {UserInfo userInfo = null;try {userInfo = userDao.findByUsername(username);} catch (Exception e) {e.printStackTrace();}//处理自己的用户对象封装成UserDetails//  User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),getAuthority(userInfo.getRoles()));User user = new User(userInfo.getUsername(), "{noop}" + userInfo.getPassword(), userInfo.getStatus() == 0 ? false : true, true, true, true, getAuthority(userInfo.getRoles()));return user;}//作用就是返回一个List集合,集合中装入的是角色描述public List getAuthority(List roles) {List list = new ArrayList<>();for (Role role : roles) {list.add(new SimpleGrantedAuthority("ROLE_" + role.getRoleName()));}return list;}
}

简单说一下退出 

 

 

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...