SpringSecurity的最基本的使用(没有深入的查看源码)
security依赖导入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
当你导入依赖什么都不做,直接运行程序,这时你访问任何一个URL,都会弹出一个“需要授权”的验证框,如图:
spring security 会默认使用一个用户名为:user 的用户,密码就是 启动的时候生成的(通过控制台console中查看)
springsecurity最主要流程分为三步,认证、授权、鉴权,其中security主要使用四大接口
UserDetailsService、AccessDecisionManager、FilterInvocationSecurityMetadataSource、WebSecurityConfigurerAdapter,
1、UserDetailsService中包含一个loadUserByUsername方法,此方法用于接收登录账号,从数据库查询出此用户信息(角色、密码等),用于后面的使用,这也是security的验证
2、FilterInvocationSecurityMetadataSource用于拦截所有的请求,当收到一个请求时,从数据库查询出能访问这个请求的角色,返回给security框架
3、AccessDecisionManager此接口用于放行和拦截请求,继承此接口重写decide,supports方法
3.1、decide用于决定用户是否有权访问此路径,(个人通俗理解,return代表通过)其中的业务逻辑根据需求自己判断
4、WebSecurityConfigurerAdapter是security的总配置,重写config方法进行相对应的操作
4.1、这里我们采用的认证是jwt认证,所以当你自定义过滤器的时候需要把自定义的过滤器也添加到配置中
这个config的配置是比较复杂的具体我也不是很了解,借网上资料(只有一部分简单的方法使用)
5、spring security的一些方法的使用
5.1、SessionCreationPolicy.STATELESS无状态的Session机制(即Spring不使用HTTPSession),对于所有的请求都做权限校验,这样Spring Security的拦截器会判断所有请求的Header上有没有”X-Auth-Token”。对于异常情况(即当Spring Security发现没有),Spring会启用一个认证入口:new RestAuthenticationEntryPoint,在我们这个场景下,这个入口只是简单的返回一个401即可:
5.2、还可以配置登录失败的处理和成功的处理
5.3、authorizeRequests()用来授权使用,如果需要添加url过滤器,前面都需要添加此方法
6、spring提供FilterRegistrationBean,此类提供对filter排序处理,可以为filter设置排序值,
让spring在注册web filter之前排序后再依次注册,实现spring的跨域请求
6.1、此类提供setOrder方法,可以为filter设置排序值,让spring在注册web filter之前排序后再依次注册。order越小越先执行
config.addAllowedOrigin("http://localhost")此方法用来设置访问源地址, “*”代表全部。”**”代表适配所有接口。
其中addAllowedOrigin(String origin)方法是追加访问源地址。如果不使用”*”(即允许全部访问源),则可以配置多条访问源来做控制。
config.addAllowedHeader("*") 设置访问源请求头 ,
config.addAllowedMethod("*")设置访问源请求方法,
source.registerCorsConfiguration("/**",config)对接口配置跨域设置