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
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<!-- 配置不过滤的资源(静态资源及登录相关) -->
<security:http security="none" pattern="/login.html" />
<security:http security="none" pattern="/failer.html" />
<security:http auto-config="true" use-expressions="false" >
<!-- 配置资料连接,表示任意路径都需要ROLE_USER权限 -->
<security:intercept-url pattern="/**" access="ROLE_USER" />
<!-- 自定义登陆页面,login-page 自定义登陆页面 authentication-failure-url 用户权限校验失败之后才会跳转到这个页面,如果数据库中没有这个用户则不会跳转到这个页面。
default-target-url 登陆成功后跳转的页面。 注:登陆页面用户名固定 username,密码 password,action:login -->
<security:form-login login-page="/login.html"
login-processing-url="/login" username-parameter="username"
password-parameter="password" authentication-failure-url="/failer.html"
default-target-url="/success.html" authentication-success-forward-url="/success.html"
/>
<!-- 关闭CSRF,默认是开启的 -->
<security:csrf disabled="true" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="user" password="{noop}user"
authorities="ROLE_USER" />
<security:user name="admin" password="{noop}admin"
authorities="ROLE_ADMIN" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
</beans>
Spring Security使用数据库认证
使用Spring security来完成认证的流程
登录代码实现1
第一步:在pom.xml里面导入依赖
这里面的依赖基本上已经导入了
第二步:在web.xml 配置一下过滤器
服务器启动,加载配置文件
配置Spring的安全过滤器
第三步:在resources里面引入spring-security.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<!-- 配置不拦截的资源 -->
<security:http pattern="/login.jsp" security="none"/>
<security:http pattern="/failer.jsp" security="none"/>
<security:http pattern="/css/**" security="none"/>
<security:http pattern="/img/**" security="none"/>
<security:http pattern="/plugins/**" security="none"/>
<security:http auto-config="true" use-expressions="false">
<!-- 配置具体的拦截的规则 pattern="请求路径的规则" access="访问系统的人,必须有ROLE_USER的角色" -->
<security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN"/>
<!-- 定义跳转的具体的页面 -->
<security:form-login
login-page="/login.jsp"
login-processing-url="/login.do"
default-target-url="/index.jsp"
authentication-failure-url="/failer.jsp"
authentication-success-forward-url="/pages/main.jsp"
/>
</security:http>
<!-- 切换成数据库中的用户名和密码 -->
<security:authentication-manager>
<!--因为我们要去用service,表示用哪一个service-->
<security:authentication-provider user-service-ref="userService">
<!-- 配置加密的方式
<security:password-encoder ref="passwordEncoder"/>-->
</security:authentication-provider>
</security:authentication-manager>
</beans>
下面去把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 {
@Autowired
private IUserDao userDao;
@Override
public 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<SimpleGrantedAuthority> getAuthority(List<Role> roles) {
List<SimpleGrantedAuthority> list = new ArrayList<>();
for (Role role : roles) {
list.add(new SimpleGrantedAuthority("ROLE_" + role.getRoleName()));
}
return list;
}
}
简单说一下退出