spring boot security ajax_springboot集成security详解

2022年6月8日10:29:32

在项目中其实一直在使用spring的security框架.核心主要是几张表:用户表,用户角色关联表,角色表,角色权限关联表,权限表(菜单表)

工作中所使用的几张关联表,authorization(类似权限表),menu_list(菜单表,主要是关联authorization下的菜单名称进行子父菜单关联),user(用户表),role(角色表),role_action(角色权限表,主要关联role和authorization的关联表).

这次主要根据springcloud官方自己搭建一套security进行练习,并重新对security进行更深入的理解。

1.准备五张表

spring boot security ajax_springboot集成security详解

2.新建一个springboot项目

添加marven:

org.springframework.boot spring-boot-starter-parent 2.0.1.RELEASEorg.springframework.cloud spring-cloud-dependencies Finchley.M7pomimportorg.springframework.boot spring-boot-starter-web org.projectlombok lombok org.springframework.boot spring-boot-starter-freemarker org.springframework.boot spring-boot-starter-security org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2com.alibaba druid-spring-boot-starter 1.1.9mysql mysql-connector-java spring-milestonesSpring Milestoneshttps://repo.spring.io/libs-milestonefalse

配置application.yml

# 配置freemarkerspring: freemarker: # 设置模板后缀名 suffix: .ftl # 设置文档类型 content-type: text/html # 设置页面编码格式 charset: UTF-8 # 设置页面缓存 cache: false # 设置ftl文件路径 template-loader-path: - classpath:/templates # 设置静态文件路径,js,css等 mvc: static-path-pattern: /static/** datasource: name: test url: jdbc:mysql://127.0.0.1:3306/rbac_db username: root password: root # druid 连接池 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver主要是为了练习,所以添加了前端页面的模板

这里说个知识:

base64加密是属于双向加密,就是加密后可以解密回来MD5是单向加密,就是加密后无法解密MD5加盐加密就是将(用户名+密码)进行MD5加密(类似都叫加盐,这里用户名就是盐值)支付宝的公钥私钥加密,公钥解密私钥,这个是最安全的加密方式.另外https是使用了安全证书,https的端口一般是443.http的端口是80

导入mapper

public interface UserMapper { // 查询用户信息 @Select(" select * from sys_user where username = #{userName}") User findByUsername(@Param("userName") String userName); // 查询用户的权限 @Select(" select permission.* from sys_user user" + " inner join sys_user_role user_role" + " on user.id = user_role.user_id inner join " + "sys_role_permission role_permission on user_role.role_id = role_permission.role_id " + " inner join sys_permission permission on role_permission.perm_id = permission.id where user.username = #{userName};") List findPermissionByUsername(@Param("userName") String userName);}public interface PermissionMapper { // 查询苏所有权限 @Select(" select * from sys_permission ") List findAllPermission();}

动态查询账号

使用UserDetailsService实现动态查询数据库验证账号(这里新建了user的实体类,并且implements userDetails),这个userDetails是security默认提供给我们的,因此对应的username和password字段不能写错否则对应不上。

@Componentpublic class MyUserDetailsService implements UserDetailsService { @Autowired private UserMapper userMapper; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // 1.根据数据库查询,用户是否登陆 User user = userMapper.findByUsername(username); // 2.查询该用户信息权限 if (user != null) { // 设置用户权限 List listPermission = userMapper.findPermissionByUsername(username); System.out.println("用户信息权限:" + user.getUsername() +
  • 作者:weixin_39664998
  • 原文链接:https://blog.csdn.net/weixin_39664998/article/details/110186362
    更新时间:2022年6月8日10:29:32 ,共 2603 字。