SpringSecurity

简介: SpringSecurity

设置用户名密码的方式:


  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比较,如果相同则放行。
相关文章
|
6月前
|
安全 Java 数据库
【SpringSecurity】Spring Security 和Shiro对比
【SpringSecurity】Spring Security 和Shiro对比
650 0
|
25天前
|
JSON 安全 Java
SpringSecurity专题
SpringSecurity专题
|
4月前
|
安全 Java 应用服务中间件
SpringSecurity3 --- 认识SpringSecurity
SpringSecurity是一个强大的安全框架,提供认证和授权功能。它支持多种认证机制,如表单、OAuth2.0、SAML2.0、CAS、RememberMe、JAAS、OpenID和X509等。。。
|
6月前
|
安全 JavaScript Java
SpringSecurity系列(一) 初识 Spring Security
SpringSecurity系列(一) 初识 Spring Security
|
6月前
【SpringSecurity 】SpringSecurity 自定义登录页面
【SpringSecurity 】SpringSecurity 自定义登录页面
96 0
|
安全 前端开发 Java
SpringSecurity的使用
SpringSecurity的使用
93 1
SpringSecurity的使用
|
安全 前端开发 Java
SpringSecurity
SpringSecurity
150 0
|
安全 Java 数据安全/隐私保护
SpringSecurity学习(一):SpringBoot整合SpringSecurity
SpringSecurity学习(一):SpringBoot整合SpringSecurity
217 0
SpringSecurity学习(一):SpringBoot整合SpringSecurity
|
安全 Java 数据安全/隐私保护
SpringSecurity的记住我
记住我现在的情况,我们只要登录之后,关闭浏览器,再登录,就会让我们重新登录,但是很多网站的情况,就是有一个记住密码的功能,这个该如何实现呢?很简单
SpringSecurity的记住我