一、用户模块
1.用户名称获取
1.分析用户存储位置为securityContext---authentication---principal对象中
//后台获取权限框架存储的用户对象
SecurityContext context = SecurityContextHolder.getContext();
User user = (User) context.getAuthentication().getPrincipal();
System.out.println(user.getUsername());
2.jsp页面获取方式
原始session域中获取
通过权限框架标签获取
${SPRING_SECURITY_CONTEXT.authentication.principal.username}
<security:authentication property="principal.username"></security:authentication>
2.用户的退出功能实现
需求:请求退出 清空session 并且跳转到login.jsp
<!--配置退出请求的过滤器节点
logout-url="/logout" 注销按钮点击请求的url路径
logout-success-url="/login.jsp" 注销成功跳转登录页
-->
<security:logout logout-url="/logout"
logout-success-url="/login.jsp"
invalidate-session="true"></security:logout>
header.jsp更改请求路径即可
<div class="pull-right">
<a href="${pageContext.request.contextPath}/logout"
class="btn btn-default btn-flat">注销</a>
</div>
3.用户的列表查询
4.用户的添加功能
1.点击跳转添加用户页面
2.点击保存提交用户信息
3.用户密码加密存储 采用框架提取的BCryptePasswordEncoder类
security.xml文件 初始化加密类对象
<bean id="pwdEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean>
------------------------------------------------------------
userService实现类 属性注入对象
@Autowired
BCryptPasswordEncoder pwdEncoder;
--------------------------------------------------------------------
保存用户的方法
@Override
public void saveUser(SysUser user) {
//将接受的明文密码加密后保存
String pwd = user.getPassword();
user.setPassword(pwdEncoder.encode(pwd));
userDao.saveUser(user);
}
4.密文方式验证登录
security.xml文件中配置 使用的加密类
<security:authentication-provider user-service-ref="userService">
<!--指定框架应用的加密类
<security:password-encoder ref="pwdEncoder"></security:password-encoder>
-->
<security:password-encoder hash="bcrypt"></security:password-encoder>
</security:authentication-provider>
---------------------------
userService实现类 去掉 noop 表示密文验证
//密码验证
User user = new User(sysUser.getUsername(),sysUser.getPassword(),authorities);
二、角色模块
初始化表结构
系统的角色表
CREATE TABLE sys_role(
id NUMBER(9) PRIMARY KEY,
roleName VARCHAR2(50) ,
roleDesc VARCHAR2(50)
)
角色和权限中间表
CREATE TABLE sys_user_role(
userId NUMBER(9),
roleId NUMBER(9),
PRIMARY KEY(userId,roleId),
FOREIGN KEY (userId) REFERENCES sys_USER(id),
FOREIGN KEY (roleId) REFERENCES sys_role(id)
)
1.角色的列表
2.角色的添加
3.用户和角色的关系维护
--------------------数据回显的实现
1.点击管理角色 传递参数为userId
<a href="${pageContext.request.contextPath}/user/managerUserRoleUI?id=${user.id}" class="btn bg-olive btn-xs">管理角色</a>
2.controller动作类接受请求 返回三种数据
@RequestMapping("/managerUserRoleUI")
public String managerUserRoleUI(Integer id,Model model){
//获取用户的信息
SysUser user = userService.findUserById(id);
//通过user对象获取所有的角色列表
List<SysRole> userRoles = user.getRoles();
//将所有的角色信息拼装成一个角色字符串用于页面的包含判断
if(userRoles!=null&&userRoles.size()>0){
StringBuilder sb = new StringBuilder();
for (SysRole userRole : userRoles) {
sb.append(userRole.getRoleName()+",");
}
model.addAttribute("rStr",sb.toString());
}
//所有的角色数据
List<SysRole> roles = roleService.findAllRole();
model.addAttribute("user",user);
model.addAttribute("roles",roles);
return "user/managerUserRole";
}
3.jsp页面el表达式 获取用户名
el表达式 获取所有角色 循环显示
el表达式 获取角色字符串判断 回显复选框选中
1.引入支持函数的标签
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
2.函数的包含方法判断
<c:if test="${fn:contains(rStr,role.roleName )}">checked</c:if>
-----------点击保存管理用户的角色----------------------------------
1.表单内多个标签 name属性一致 value值不一致 是通过数组方式传递
保证多个角色id传递到后台服务器 通过数组形式
<td><input name="ids" type="checkbox" <c:if test="${fn:contains(rStr,role.roleName )}">checked</c:if> value="${role.id}"></td>
保证被管理的userid传递
<input type="hidden" name="userId" value="${user.id}">
多个角色id维护关系逻辑为 先删除再添加
public void managerUserRole(Integer userId, Integer[] ids) {
//先根据用户id删除原始角色
userDao.removeRoleFromUser(userId);
//添加角色
if(ids!=null&&ids.length>0){
for (Integer rid : ids) {
userDao.saveUserRole(userId,rid);
}
}
}
4.获取用户真实角色验证登录
1.更改userService实现类 登录时候获取这是的角色
List<SysRole> userRoles = sysUser.getRoles();
if(userRoles!=null&&userRoles.size()>0){
for (SysRole userRole : userRoles) {
authorities.add(new SimpleGrantedAuthority(userRole.getRoleName()));
}
}
2.修改security的配置文件支持多个角色验证登录
<security:intercept-url pattern="/**" access="ROLE_USER,ROLE_ORDER,ROLE_PRODUCT,ROLE_ADMIN"></security:intercept-url>
标签:用户加密,角色,userId,userRoles,用户,user,id From: https://blog.51cto.com/u_15765446/5718377