第一步先讲Sercuity整合
设计思路步骤
- 引入maven工程(这里只用做基本信息拦截,所以没用auth2包)
Spring Security 包含的AOP,config,web 3个子包
AOP包为核心思想包
web包里面包含过滤器和相关的Web安全基础结构代码。任何具有servlet API依赖性的东西。如果您需要Spring Security Web身份验证服务和基于URL的访问控制,则需要它
config包里包含安全名称空间解析代码和Java配置代码。如果您使用Spring Security XML命名空间进行配置或Spring Security的Java配置支持
- 核心类详解
webSecurityConfigurerAdapter userDetailsService userDetails AbstractSecurityInterceptor
1.webSecurityConfigurerAdapter(安全配置适配器) 主要方法有configure ,对HttpSecurity的配置和对AuthenticationManagerBuilder的配置,对userDetailsService的注入
- userDetailsService(认证用户安全接口)主要方法是loaduserByUsername,通过用户名拿到用户认证身份
- userDetails(认证用户实体类)可写一个User类继承
- AbstractSecurityInterceptor(安全拦截抽象接口),可以执行多层安全拦截,doFilter使每层拦截都能获取认证权限,比较可以加上auth2安全证书认证
补充说明:
Spring Security其实除了权限管理器以外还有决策管理器可以实现路径访问权限,通过匿名用户来达到访问项目一些公共区域(游客功能),主要类是AccessDecisionManager
设计如下
3设计分析
1.创建Sercurity需要的数据库表
admin_user ,admin_role,admin_menu 3个基础表
添加admin_role_menu作为关联表
2创建一个简单的保存用户流程
3创建测试类,使用模拟参数发送http请求
出现下面结果
直接访问地址http://localhost:8016/admin/user/save
401出现原因:未授权
发现问题,一步一步来,webSecurityConfigurerAdapter继承类中是否有配置路径:
没有此路径设置
其他路径都需要,再看看决策管理类AccessDecisionManager,decide方法中配置的匿名用户访问路径,也没有,所以证明,此接口访问需要安全身份验证,结果正确
再规定一个可以访问的路径
访问接口此接口,顺利通过
对安全信息进行处理
然后再此访问接口
发现无法获取角色信息,另外拦截后返回信息是
证明是起了作用的,同样试下,匿名信息的情况
发现也被拦截了,那么有2个问题,正常用户,匿名用户如何传递正确的参数呢?
仔细检查,后发现/auth/login.其实有正确的请求到接口,只是在参数中不包含user而被访问再次拒绝
再次换个可通过的匿名接口测试
发现没有问题!
那么如何判断自身的安全模块是否真的完善正确呢
1,需要做一个登陆授权
2,将登陆的授权角色传递给需要验证的安全接口,证明此接口需要用户角色信息