思路:
自定义一个loginCallbackFilter用于单点登录成功后执行模拟用户认证授权登录的操作。
当授权成功后所有配置需要授权才能访问的url就再也不会被任何filter拦截,可随意访问了。
详细过程
01/ 自定义loginCallbackFilter类/自定义sso的properties信息/自定义security的properties信息
02/在web.xml中配置cas sso的servlet 并指定servlet-mapping 的 url 为 /ssoLogin
03/调用单点登录接口带上用户名密码
04/单点登录成功后调转到sso配置的successURL 该url是虚拟的/security/login 目的是为了让 loginCallbackFilter 拦截这个URL进行过滤处理
05/loginCallbackFilter拦截 successURL
06/判断单点登录成功后写入的session对象是否存在,不存在说明授权失败,给出错误提示
07/存在就验证这个用户有没有存在于本地的mysql数据表user里
08/如果user表没有该用户,插入该用户到mysql表。当存在该用户时比对密码,如果密码不一致则更新user表中的密码。
09/至此本地mysql的user表中必定存在有单点登录的用户,调用sessionService的login方法执行认证授权操作[一定能通过]
10/此时,创建了用户的session并且系统已经授权完毕,isFullyAuthenticated() 为 true
11/重定向到targetUrl -> localhost:8080
12/通过调用/rest/saiku/session [GET] 获取到session信息
13/登录成功,进入管理台操作cube
探索过程中遇见的几个问题
单点登录过来的用户没有权限,那么将用户创建到本地mysql时怎么赋予权限
解决:默认给一个最低的ROLE_USER权限