Spring Boot整合Spring Security

深藏阁楼爱情的钟 2021-10-19 15:18 539阅读 0赞

Spring Boot 整合Spring Security

  • 前言
  • 项目创建
  • 使用

前言

  Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直是 Shiro 的天下。
  相对于 Shiro,在 SSM/SSH 中整合 Spring Security 都是比较麻烦的操作,所以,Spring Security 虽然功能比 Shiro 强大,但是使用反而没有 Shiro 多(Shiro 虽然功能没有 Spring Security 多,但是对于大部分项目而言,Shiro 也够用了)。
  自从有了 Spring Boot 之后,Spring Boot 对于 Spring Security 提供了 自动化配置方案,可以零配置使用 Spring Security。
  因此,一般来说,常见的安全管理技术栈的组合是这样的:
SSM + Shiro
Spring Boot/Spring Cloud + Spring Security
  注意,这只是一个推荐的组合而已,如果单纯从技术上来说,无论怎么组合,都是可以运行的。
我们来看下具体使用。

项目创建

创建一个Spring Boot项目,勾选Web和Security依赖
在这里插入图片描述

使用

测试访问
在这里插入图片描述
需要输入用户名和密码,用户名默认为user,密码默认为项目启动时由UUID生成的随机字符序列
在这里插入图片描述
登录后
在这里插入图片描述
同时可以自己设置账号密码
配置文件中设置

  1. spring.security.user.name=root
  2. spring.security.user.password=1234

登录
在这里插入图片描述
在这里插入图片描述
也可以在java代码中配置,创建一个SecurityConfig类继承自WebSecurityConfigurerAdapter,
在java中配置密码时不加密是不行的,我们需要在Test中生成密码的密文
Test

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class SecurityApplicationTests {
  4. @Test
  5. public void contextLoads() {
  6. BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
  7. for (int i = 0; i < 10; i++) {
  8. System.out.println(encoder.encode("123"));
  9. }
  10. }
  11. }

在这里插入图片描述
SecurityConfig

  1. @Configuration
  2. public class SecurityConfig extends WebSecurityConfigurerAdapter {
  3. @Bean
  4. PasswordEncoder passwordEncoder(){
  5. return new BCryptPasswordEncoder();
  6. }
  7. @Override
  8. public void configure(AuthenticationManagerBuilder auth) throws Exception {
  9. auth.inMemoryAuthentication()
  10. .withUser("root").password("$2a$10$OR3VSksVAmCzc.7WeaRPR.t0wyCsIj24k0Bne8iKWV1o.V9wsP8Xe").roles("admin")
  11. .and()
  12. .withUser("zhangsan").password("$2a$10$p1H8iWa8I4.CA.7Z8bwLjes91ZpY.rYREGHQEInNtAp4NzL6PLKxi").roles("user");
  13. }
  14. @Override
  15. protected void configure(HttpSecurity http) throws Exception {
  16. http.authorizeRequests()
  17. .antMatchers("/admin/**").hasAnyRole("admin")
  18. .and()
  19. .authorizeRequests().antMatchers("/user/**").hasAnyRole("user")
  20. .formLogin();
  21. }
  22. }

实现一个Controller用于测试

  1. @RestController
  2. public class HelloController {
  3. @GetMapping("/hello")
  4. public String Hello(){
  5. return "Hello Security !";
  6. }
  7. @GetMapping("/admin/hello")
  8. public String admin(){
  9. return "Hello Admin !";
  10. }
  11. @GetMapping("/user/hello")
  12. public String user(){
  13. return "Hello User !";
  14. }
  15. }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,539人围观)

还没有评论,来说两句吧...

相关阅读