美文网首页
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