首页 > 其他分享 >3.用户登陆-用户加密-用户与角色

3.用户登陆-用户加密-用户与角色

时间:2022-09-28 10:08:49浏览次数:49  
标签:用户加密 角色 userId userRoles 用户 user id


一、用户模块

3.用户登陆-用户加密-用户与角色_el表达式

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.用户的添加功能

3.用户登陆-用户加密-用户与角色_数组_02


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);


二、角色模块

初始化表结构

3.用户登陆-用户加密-用户与角色_ide_03


系统的角色表
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.用户和角色的关系维护

3.用户登陆-用户加密-用户与角色_el表达式_04


--------------------数据回显的实现
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

相关文章

  • 8.持续集成环境-Jenkins用户权限管理
    Jenkins默认的权限设置比较粗狂,不太细致,所有我们需要安装插件进行权限管理 1.安装Role-based-AuthorizationStraegy插件其中ConfigureGlobalSecurity就是一个全局安全......
  • django项目 多个页面判断用户是否登录
    url.py文件:1fromdjango.contribimportadmin2fromdjango.urlsimportpath3frombooimportviews45urlpatterns=[6path('admin/',admin.sit......
  • 用户态与内核态
    转载:https://juejin.cn/post/6920621924791894023#commenthttps://www.cnblogs.com/shangxiaofei/p/5567776.html......
  • Linux源码list.h用户态改编
    前言操作系统课程的第一个作业:理解list.h的设计思想和技巧并用list.h实现一个进程管理程序。我的Linux环境为WSL-Ubuntu,该环境中/usr/include/linux目录下无list.h文件,......
  • 独显与核显有什么区别?都适合哪些用户?
    https://baijiahao.baidu.com/s?id=1737755233650292448&wfr=spider&for=pc无论是笔记本电脑还是台式机,都必须拥有显卡才能实现画面的输出(部分处理器没有集成显卡,必须单独......
  • JAVA使用Session获取用户信息
    JAVA使用Session获取用户信息1.在登录的Controller中将用户信息塞入Session//前端传入用户信息@RequestMapping("/login")@ResponseBodypublicResultlogin(@Reques......
  • mysql练习--统计复旦用户8月练题情况
    描述题目:现在运营想要了解复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况,请取出相应明细数据,对于在8月份没有练习过的用户,答题数结果返回0. 示例:用......
  • 2.关联菜单角色表实现根据角色实现授权
    1.总结:前天主要是实现了menu表以及menu_role表的创建,通过数据表存储用户访问路径所需要的角色来决定用户是否可以访问,再就是编写mapper层中的menuMapper以及对应......
  • Oracle游标遍历所有用户表
    DECLARE tablenamevarchar(500); vsqlvarchar(500); vcountint; vcount1int; cursoremp_cursorisselecttable_namefromuser_tables;BEGIN vcount:=1......
  • Linux用户和用户组
    一、Linux用户和用户组的概念Linux是多用户多任务操作系统,换句话说,Linux系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。不同用户具有不......