中软国际实训记录(四)
昨天我们实现了ssm登录分页以及搜索功能,今天我们主要是学习过滤器、批量删除以及角色权限管理。在本文中主要记录今天实现中所遇到的问题以及一些解决方法
1.分页以及模糊查询功能
这里昨天我们已经实现,具体问题可以查看上一篇实训记录文档,主要使用MyBtis的插件PageHelper来实现分页,同时在dependency中添加依赖字段,进行相关配置即可。
2.角色管理数据库以及相关操作
- 首先对角色进行管理,要在数据库中创建两张表,role与user_role
- 分别在项目对应文件夹下创建接口与实现的类
- 然后在UserService.java里面接口继承UserDetailsService
- 同时需要在IUserInfoDao中定义findUserByName方法,并且在UserMapper.xml里面进行实现
- 最后在UserInfo.xml中添加下列代码:
<select id="findUserByName" parameterType="String" resultType="com.zhongruan.bean.UserInfo">
select * from userinfo where name=#{name}
</select>
2.1 相关接口继承
pass
2.2 role类
package com.zhongruan.bean;
public class Role {
private int id;
private String roleName;
private String roleDesc;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
@Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", roleDesc='" + roleDesc + '\'' +
'}';
}
}
2.3 IRoleDao接口
package com.zhongruan.dao;
import com.zhongruan.bean.Role;
import javax.print.DocFlavor;
import java.util.List;
public interface IRoleDao {
List<Role> findRoleByUserId(int userId);
}
2.4 RoleMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zhongruan.dao.IRoleDao" >
<select id="findRoleByUserId" parameterType="int" resultType="com.zhongruan.bean.Role">
select * from role where id in (select roleId from user_role where userId=#{userId})
</select>
</mapper>
2.5 修改UserInfoServiceImpl
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserInfo userInfo =userInfoDao.findUserByName(username);
List<Role>roles=roleDao.findRoleByUserId(userInfo.getId());
User user=new User(userInfo.getName(),"{noop}"+userInfo.getPassword(),getAuthority(roles));
return user;
}
private Collection<? extends GrantedAuthority> getAuthority(List<Role> roles) {
List<SimpleGrantedAuthority>list=new ArrayList<>();
for(Role role:roles){
list.add(new SimpleGrantedAuthority("ROLE_"+role.getRoleName()));
}
return list;
}
2.6 修改login.jsp
- 修改响应路径即可
3.过滤器
过滤器,对客户端访问资源的过滤,满足条件的通过,不满足的禁止,同时对目标资源访问前后进行逻辑处理,需要对request设置编码,这样做使得所有走过servlet的编码是统一的,对于权限管理来说,在过滤器内部进行去除当前登录客户端角色,再看访问资源,如果匹配则通过,不匹配则不通过。
可以通过下面这个图来进行理解:
- 我们需要在web.xml中声明过滤器相关
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 然后添加相关的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 1.注解扫描位置-->
<context:component-scan base-package="com.zhongruan.controller" />
<!-- 2.配置映射处理和适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 3.视图的解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
…
- ps: 遇到一些配置上的小问题,搜索百度解决