从零学springSecurity-身份认证_httpBasic

283人浏览 / 7人评论 | 作者:kite

作者:kite

链接:http://kite.vsftp.cn:8089/article/3.index.html

声明:请尊重原作者的劳动,如需转载请注明出处


认证方式
HttpBasic:
确定核心模块CORE中已经添加springSecurity依赖

  
       
           org.springframework.boot
           spring-boot-starter-security
       
      
           javax.servlet
           servlet-api
           2.5
       

代码实现:
CORE下添加Security配置类SpringSecurityConfig,路径为:org/kite/security/config/SpringSecurityConfig.java,在类上添加@Configuration注解声明为配置类,并且继承Security提供的配置适配器:WebSecurityConfigurerAdapter[抽象类],再添加注解:@EnableWebSecurity 来开启Security的过滤器链。

重写configure(AuthenticationManagerBuilder auth)以及configure(HttpSecurity http)函数。  
    configure(AuthenticationManagerBuilder auth)[认证管理器]:  
        认证/匹配用户信息[账号/密码等]  
    扩展:基于内存存储的用户信息校验:

```
    auth.inMemoryAuthentication().withUser("指定的用户名").password("指定的密码[不支持明文密码,会报错的,]").authorities("指定一个权限标示[仅仅上指定一个标示,因为这里不可以为空]");
    // 推荐加密
    @Bean
    public PasswordEncoder PasswordEncoder() {
    // 通过明文密码+随机盐值加密
    return new BCryptPasswordEncoder();
}
    String password = PasswordEncoder().encode("1234");
    log.info("加密之后存储的密码,"+password);  
    auth.inMemoryAuthentication().withUser("kite").password(password).authorities("ADMIN");
```

密码加密可以调用[PasswordEncoder](#PasswordEncoder)接口内的[encode](#encode)函数对密码进行加密。 

[BCryptPasswordEncoder](#BCryptPasswordEncoder):加盐随机加密

加密过程[注册]:随机生成盐值 + 明文密码 = 密文密码 = 入库

校验过程[匹配]:盐值[数据库中获取] + 用户输入的明文密码 = 加密成功密文密码与数据库中相同用户的密文密码匹配 Security自动实现此操作  
configure(HttpSecurity http)[资源权限配置]:  
    配置被拦截的资源:  
        通过配置函数内容:

  ```
  // 指定认证方式为httpBasic 
  http.httpBasic()
      .and()
      // 针对所有认证请求[http]都要求经过身份认证才可以正常访问
      .authorizeRequests().anyRequest().authenticated()
  ```  

这样配置后便可以实现验证所有http请求来控制访问网站。  

-----------------------------------------注释-----------------------------------

PasswordEncoder: 所在包路径为

org.springframework.security.crypto.password

String encode(CharSequence rawPassword);:用来加密明文密码.
boolean matches(CharSequence rawPassword[用户密码], String encodedPassword[数据库内存储的对应的密码]);:用来匹配用户密码,两个参数匹配.
default boolean upgradeEncoding(String encodedPassword) { return false; }:可以对密码进行多次加密提高安全性,默认false为不使用

BCryptPasswordEncoder所在包路径为

org.springframework.security.crypto.bcrypt;

 

加密器

public BCryptPasswordEncoder() {
        this(-1);
    }
加盐随机加密实现

原创:笔记


点赞(0) 打赏

全部评论

2021-05-26 20:25
2021-02-20 09:57
2021-05-26 20:25
2021-02-20 09:57
2021-05-26 20:25
2021-02-20 09:57
2021-05-26 20:25
2021-02-20 09:57
2021-05-26 20:25
2021-02-20 09:57
2021-02-20 09:57
2021-02-20 09:57