111111yy(01 - 快速体验 Spring Security 5.7.2 | 权限管理基础)

内容头部广告位(手机)


在前面 SpringBoot 22 的系列文章中(进主要查看),已经创建了几个 puter 相关的接口,这些接口直接通过 Spring Doc 或 POSTMAN 就可以访问。例如:

GET http://localhost:9099/puter/1

访问该服务可以获取 id 为 1 的电脑详情。

接下来的文章就使用 Spring Security 实现用户认证和授权。

1 添加 Spring Security

1springframework2 测试服务

添加依赖后重新启动服务,可以在控制台看到输出:

在浏览器中访问该服务,会自动跳转到登录页面,该页面是 Spring Security 默认提供的。浏览器中地址栏自动跳转到:

http://localhost:9099/login

在登录页面,用户名填写 user,密码填写上面控制台中输出的密码,点击“Sign in”,便会进入系统,显示电脑详情。

2 硬编码配置用户名和密码

咱们使用的 Spring Boot 版本是 22,对应的 Spring Security 版本为 52,从 5yml 中写死用户名和密码;

  • 定义配置类,在该方法中写死用户名密码;
  • 实现 UserDetailsService 接口,然后定义配置类进行配置。
  • 前面两者在 demo 中玩玩就行。

    2yml 中配置即可:

    spring: profiles: active: @env@ security: user: name: hero1 password: '111111' roles: 'admin'

    2yygnbconfig; import orgcontextBean; import orgcontextConfiguration; import orgsecurityuserdetailsspringframeworkcoreUserDetails; import orgsecuritybcryptspringframeworkcryptoPasswordEncoder; import orgsecurityInMemoryUserDetailsManager; @Configuration public class SecurityConfig { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public InMemoryUserDetailsManager userDetailsService() { UserDetails user = Userusername("hero2") encode("111111")) build(); return new InMemoryUserDetailsManager(user); } }

    重启服务,登录界面输入 hero2/111111 进行测试。

    这种方式也是写死的用户名密码,在实际开发中不会使用的。所以,先删除这个文件,然后再继续后面的学习。

    3 数据库配置用户名和密码

    在开始这个部分之前,请确保删除了上面编写的 SecurityConfig。

    37xml,该文件用来定义这次数据库的变更。

    <?xml version="1w3liquibaseliquibaseliquibase12 生成实体类

    可以通过逆向工程生成,可以复制下面的代码。

    demoUser

    /** * 用户表 */ @Schema(title = "用户") @Data @NoArgsConstructor @AllArgsConstructor @Builder public class User implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType3 Mapper

    demoUserMapper

    public interface UserMapper extends BaseMapper<User> { }

    resources/mapper/UserMapper0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis0//EN" "http://mybatisdtd"> <mapper namespace="demoUserMapper"> </mapper>

    到这一步,准备工作就完成了,接下来继续回到 Spring Security。

    3yygnbconfig5 实现 UserDetailsService 接口

    Spring Security 提供了一个接口:UserDetailsService 。该接口只有一个方法 loadUserByUsername,在该方法中就可以查询数据库,根据用户名查询用户信息了。该方法返回 UserDetails。UserDetails 是一个接口,Spring Security 提供了一个实现类 User。

    创建类:UserDetailsServiceImpl,实现 UserDetailsService 接口,并添加 @Service 注解。

    demoimplyygnbservicebaomidoucorequeryyygnbentityyygnbmapperRequiredArgsConstructor; import orgsecurityGrantedAuthority; import orgsecurityauthorityspringframeworkcoreUserDetails; import orgsecurityuserdetailsspringframeworkcoreUsernameNotFoundException; import orgsecuritypasswordspringframeworkService; import javaList; @RequiredArgsConstructor @Service public class UserDetailsServiceImpl implements UserDetailsService { // @Autowired private final PasswordEncoder passwordEncoder; private final UserMapper userMapper; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapperuserMappermaSeparatedStringToAuthorityList("admin"); return new orgsecurityuserdetailsgetUsername(), passwordEncodergetPassword()), authorities); } }

    如果是以前版本的 Spring Security,还需要定义配置继承自 WebSecurityConfigurerAdapter 类,重写 config 方法,并在该方法中设置 UserDetailsService 等。现在的版本不需要这些无聊的操作了。

    重启服务,访问测试。

    感谢你阅读本文,如果本文给了你一点点帮助或者启发,还请三连支持一下,点赞、关注、收藏,作者会持续与大家分享更多干货

    内容底部广告位(手机)
    标签:

    管理员
    草根站长管理员

    专注网站优化+网络营销,只做有思想的高价值网站,只提供有担当的营销服务!

    上一篇:宝塔山是革命圣地延安的标志和象征--宝塔山简介
    下一篇:鳄鱼肉价格(泰国人吃鳄鱼肉,你想试试吗?)