美文网首页
SpringSecurity

SpringSecurity

作者: 垃圾简书_吃枣药丸 | 来源:发表于2021-05-21 11:43 被阅读0次

    设置用户名密码的方式:

    1. 配置文件
    # 设置默认的用户名密码
    spring.security.user.name=futao
    spring.security.user.password=nobug666.
    
    1. 配置类的方式
    /**
     * @author ft
     * @date 2021/5/18
     */
    @Configuration
    public class UserNamePwdConfig extends WebSecurityConfigurerAdapter {
    
        /**
         * 设置登录的用户名密码
         *
         * @param auth
         * @throws Exception
         */
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
            String password = passwordEncoder.encode("nobug666.");
            auth.inMemoryAuthentication()
                    .withUser("futao")
                    .password(password)
                    .roles("admin");
        }
    
        @Bean
        public PasswordEncoder passwordEncoder() {
            return new BCryptPasswordEncoder();
        }
    }
    
    1. 查数据库的方式
    @Service
    public class UserService implements UserDetailsService {
    
        @Override
        public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
            List<GrantedAuthority> roles = AuthorityUtils.commaSeparatedStringToAuthorityList("admin");
            return new User("futao", new BCryptPasswordEncoder().encode("nobug666."), roles);
        }
    }
    
        /**
         * 设置登录的用户名密码
         *
         * @param auth
         * @throws Exception
         */
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    //        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    //        String password = passwordEncoder.encode("nobug666.");
    //        auth.inMemoryAuthentication()
    //                .withUser("futao")
    //                .password(password)
    //                .roles("admin");
    
    
            // 配置类的方式设置用户名密码
            auth.userDetailsService(userDetailsService)
                    .passwordEncoder(passwordEncoder());
        }
    

    # CSRF Cross-site request forgery,跨站请求伪造

    用户在登录站点A之后,保存了站点A的cookie。之后站点B去恶意访问站点A的接口,浏览器会携带上站点A的cookie,就造成了跨站请求伪造。

    • SpringSecurity应对跨站请求伪造:过滤器:CsrfFilter
      • CsrfFilter过滤器先获取服务器内csrfToken(从cookie/session),如果没有则生成并保存
      • 将csrfToken给客户端:request.setAttribute
      • 验证:
        • 客户端拿到request.getAttribute
        • 客户端请求站点需要带上csrfToken
        • 从header或者parameter中读取actualToken,将该actualToken与csrfToken比较,如果相同则放行。

    相关文章

      网友评论

          本文标题:SpringSecurity

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