shiro、security认证用的过滤器较多
- 禁止浏览器缓存所有动态页面(资源)
- response.setDateHeader("Expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
设置为-1就是不缓存,如果设置为时间,表示缓存多久,需要实现Filter接口
- 实现url级别的权限判断(权限放行)
- 使用shiro过滤器判断url连接配置,常用的几种过滤器:
Anon->anonymousFilter、任何请求都返回true
authc->formAuthenticationFilter、如果是登录请求,则执行登录操作,否则保存请求连接跳转到登录请求界面。执行登录:executelogin方法创建token获取subject对象,执行login最后到realm查询数据库做比较
perms->permissionAuthorizationFilter判断权限
roles->rolesAuthorizationFilter授权
user->userFilter获取subject中存储的username实体对象
logout->logoutFilter使用subject退出登录
-
- 使用security的资源服务器
阻止加用户冒充真实用户,所以需要authentication认证
阻止真实用户访问不该访问的页面,需要authorization授权
阻止真实用户与网站之间传输的信息被窃取,需要encryption加密
继承ResourceServerConfigurerAdapter类,通过http设置自定义认证和授权
默认的格式:
http.authorizarequests().antMatchers().antMatchers().access().anyrequest().authenticated().and().formlogin().and().httpBasic()
- 使用过滤来处理多种登录(集成登录)
集成登录,其实就是将账号登录和验证码登录集成在一起,通过
过滤器-》接口-》抽象类-》账号登录实现类-》验证码四层结构
过滤器:继承onceperrequestfilter为每个请求过滤url,为/oauth/token的请求就设置集成登录信息,后置处理中执行处理集成认证方法,不是所有请求都有集成登录
接口:处理集成认证、预处理、是否支持集成认证类型、认证结束后执行
抽象类:实现接口,处理集成认证、预处理、是否支持集成认证类型、认证结束后执行
账号登录实现类:继承抽象类,主要处理自定义集成认证,可以将前后台区别开
验证码实现类:预处理中验证验证码
认证服务器AuthorizationServerConfigurerAdapter的configure方法也需要自定义一个userDetailsService,注入IntegrationAuthenticator调用处理集成认证方法,返回需要的UserDetails用户信息