SpringBoot:security框架杂记

  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所对应的数据,也就是活它没被限制,可以继续运行。如果用户没有这个权限,就抛出权限不足的异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝多芬也爱敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值