SpringBoot:security框架杂记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/apache_z/article/details/102602844
  1. 直接引入SpringBootSecurity依赖之后,就可以进行访问限制,账号是uesr,密码会在控制台上打印出来
    ===========
  2. 代码中账号密码的优先级高于配置文件中的优先级,只要在代码中配置,配置文件中的账号密码就会失效。
  3. 添加账号密码,通过注入的AuthenticationManagerBuilder,添加账号withuser().password().roles()。
  4. URL访问限制,就需要继承WebSecurityConfigurerAdapter类,并实现configure()方法,由于要实现的功能不同,configure()里面的参数也就不同,上面的AuthenticationManagerBuilder,这个是关于账号密码的添加,HttpSecurity是设置URL访问限制的。
  5. 实现方法级安全看这,本质上就是在调用这个方法的时候,校验这个用户是否有这个权限。
    ===========
  6. 通过数据库设置用户的角色信息。auth.userDetailsService(userService);要求userService实现UserDetailsService接口,接口中只有一个方法就是拿到用户详情对象UserDetails。可以理解为:在你登录的时候,Security框架会拿着你的userService对象,调用里面的loadUserByUsername()方法创建一个user对象,里面封装了用户的基本信息,以及用户的角色列表。同时注意这个user对象也需要实现UserDetails接口,因为那个loadUserByUsername()方法的返回值就是这个类型。同时会将信息进行对比,正确并且有这个角色才允许进去。
  7. 从数据库中查询可以访问该URL的所需要的角色。首先拦截到请求对象,从对象中拿到URL,访问数据库,查看访问这个URL的所有角色,封装之后返回这个LIst。同时这时候我也有登陆用户的信息,其中包含了用户的角色信息,进行比对,具有相同的,则这个用户就具有访问这个URL的权限。否则抛出访问拒绝异常。
 @Override
   protected void configure(HttpSecurity http) throws Exception {
       http.authorizeRequests()
               .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
                   @Override
                   public <O extends FilterSecurityInterceptor> O postProcess(O object) {
                   //cfisms()作用是拿到所有的URL匹配的角色
                       object.setSecurityMetadataSource(cfisms());
                       //这个就是进行匹配校验
                       object.setAccessDecisionManager(cadm());
                       return object;
                   }
               })
               .and()
               .formLogin()
               .loginProcessingUrl("/login").permitAll()
               .and()
               .csrf().disable();
   }
  1. 关于Catch看这篇文章

总结:

Security可以分为两种情况,是否是合法用户,是否有权限访问。
当用户登陆的时候, 首先根据Service的UserDetialService来查询用户,同时将用户的所有角色信息,进行封存。
在用户输完密码后,将用户的密码用相同的算法加密,跟缓存中的对象密码进行对比,相同则向下运行。
同时判断用户是否具有访问这个URL的角色,如果数据库中没有这个URL所对应的数据,也就是活它没被限制,可以继续运行。如果用户没有这个权限,就抛出权限不足的异常。

猜你喜欢

转载自blog.csdn.net/apache_z/article/details/102602844