记录springboot中使用springsecurity一些注意和需要理解的地方

前几天在springboot中使用了下springsecurity做下记录  ,先简单介绍下security

security是spring的一个安全权限框架  无论是之前的单系统还是现在的前后端分离 都可以很好的集成使用,主要分为三块内容

1.认证

2.鉴权

3.安全防护

认证是在用户第一次登录的时候(因为加了token,用的jwt),需要首先去认证,并生成token,这个token的处理可以放在redis并设置超时时间,用户的下一次登录是否需要重新获取。认证完成后就是对用户权限的判断,在访问之后系统应用的接口中都会对这个权限进行检查  如果没有权限是无法访问后端接口的,相应的信息也会返回给前端。

上面是一个大概的流程  下边贴下比较重要的几个类和内容

1.记录springboot中使用springsecurity一些注意和需要理解的地方_第1张图片

首先要有一个配置类 这个配置类是我们自定义权限配置的类 继承自WebSecurityConfigurerAdapter

记录springboot中使用springsecurity一些注意和需要理解的地方_第2张图片

这个方法是需要重写的 具体的.and().formlogin().loginProcessinUrl();这个属性是对登录路径的过滤 会转到这个路径去进行登录认证接口。在前后端不分离的系统中也有一个属性可以直接返回到登录页面。permitALL是对哪些路径进行放行,不进行拦截。

当然最上面 那两个过滤器是重中之重,配置类构建的时候

http.addFilterBefore(getJwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)

 

已经对这两个类进行创建,并在访问系统的时候按顺序先执行第一个过滤器中的内容记录springboot中使用springsecurity一些注意和需要理解的地方_第3张图片

这个过滤器中检查是否有token没有的话记录日志并直接带参走向下一个顾虑器 也即是下边这个

记录springboot中使用springsecurity一些注意和需要理解的地方_第4张图片

这个过滤器从名字可以看的出来是对用户认证 的 这个时候传进来的表单形式的用户名和密码是要和这两个字段保持一直的,当然也可以自己重写方法,但是这两个字段是要确定的  这里过虑器接受的请求参数只能通过request.getparameter来获取,所以无法做到向控制器那么灵活。这点需要注意  ,这个认证肯定要拿到数据库的数据才能进行比较,那他是什么时候去查的呢?

记录springboot中使用springsecurity一些注意和需要理解的地方_第5张图片

记录springboot中使用springsecurity一些注意和需要理解的地方_第6张图片

经过这两个方法,参数userDetailService为自己写的服务类 要有认证 的方法当然这个类也是实现的框架提供的接口,方法是自动调用的,方法如下

记录springboot中使用springsecurity一些注意和需要理解的地方_第7张图片

具体实现就不贴了 就是去数据库根据用户名查询用户的密码和角色信息,交给框架进行处理,这里的处理我们自己也可以做了,两份密码都拿到就可以比较了,上面的密码passwordEncoder 在2.几版本之后就需要这样 加密解密比较 且是动态的每次都不一样,更安全。这个认证完成之后会继续走第一个配置类中的成功处理successHandler类的方法  如下

记录springboot中使用springsecurity一些注意和需要理解的地方_第8张图片

基本就是记录日志了 返回给前端信息值了之类的。 security框架的这几个类和接口比较重要 ,特此记录下,下边总结下之前碰到的不理解的在这个框架的所得和理解。

1.配置类的set属性比较多 也就是复杂对象 构建的时候不一定会对所有字段进行设置 用到了建造者模式  且每个set方法都是返回的当前对象 这样set完之后可以继续set,是建造者模式的典型体现,灵活比起构造函数。。

2.对一个接口多个实现类的方式 必须指明自动注入的类对象  使用@qualify  后边的值是@service中启的名字  在没有注解的旧系统中可以使用ApplicationContext进行设置。

 

你可能感兴趣的:(java,springboot,security,spring,security,security框架,springboot,jwt,token)