美文网首页
spring boot+spring security的学习笔记

spring boot+spring security的学习笔记

作者: 在一年四季的风中凌乱 | 来源:发表于2019-08-07 17:15 被阅读0次

    一、开发环境搭建(spring boot项目的创建过程):

    在pom中加入依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    

    依赖加入后创建controller层测试:

    @RestController
    @RequestMapping(value = "/test")
    public class UserController {
        
        @GetMapping
        public String test(){
            return "TEST";
        }
    }
    

    启动application类进行测试,可以在控制台看到security默认的密码:

    image.png
    测试,在浏览器中输入http://localhost:8080/test
    页面如下:
    image.png
    用户默认为userr,密码为控制台默认的密码:
    image.png
    成功跳转后:
    image.png
    一个最简单的security项目实现,以上使用的是默认机制!

    二、也可以自定义用户名密码,简单的方式:

    spring:
      security:
        user:
          name: user
          password: 123
    

    但是这种方式只能有一个用户,我们可以硬编码为2+的用户,写一个类extends WebSecurityConfigurerAdapter :

    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        //防止报错:java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
        private PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.inMemoryAuthentication()
                    .passwordEncoder(passwordEncoder())
                    .withUser("11")
                    .password(passwordEncoder().encode("11"))
                    .roles("user")
                    .and()
                    .withUser("22")
                    .password(passwordEncoder().encode("22"))
                    .roles("user");
        }
    
    }
    

    启动项目可以进行测试,硬编码2+用户已经实现,但是这种不是很灵活:

    我们可以实现读取数据库灵活添加用户的目的,创建User


    image.png image.png image.png

    详情见: https://www.jianshu.com/p/37ba0b016ca0

    然后在WebSecurityConfig重写UserDetailsService:

        @Autowired
        private UserRepository userRepository;
    
        @Override
        @Bean
        public UserDetailsService userDetailsService() {
            return new UserDetailsService() {
                @Override
                public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {
                    User user = userRepository.getByName(name);
                    if (user == null) {
                        throw new UsernameNotFoundException("用户名未找到");
                    }
                    String password = user.getPassword();
                    PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
                    String passwordAfterEncoder = passwordEncoder.encode(password);
                    return org.springframework.security.core.userdetails.User.withUsername(user.getName()).password(passwordAfterEncoder).roles("").build();
                }
            };
        }
    

    重写后在config中引入,

        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
             // 数据库读取登录信息
            auth.userDetailsService(userDetailsService());
    //        auth.inMemoryAuthentication()
    //                .passwordEncoder(passwordEncoder())
    //                .withUser("11")
    //                .password(passwordEncoder().encode("11"))
    //                .roles("user")
    //                .and()
    //                .withUser("22")
    //                .password(passwordEncoder().encode("22"))
    //                .roles("user");
        }
    

    参考链接:
    https://www.cnblogs.com/LOVE0612/p/9897647.html

    相关文章

      网友评论

          本文标题:spring boot+spring security的学习笔记

          本文链接:https://www.haomeiwen.com/subject/aoradctx.html