
1 sfwn Sep 9, 2017 via Android redis key 可以设置超时时间 |
2 yidinghe &nbp; Sep 9, 2017 via Android 用其他 cookie 来代替缺省的 session,超时时间直接设在 redis 里,浏览器设置超时 30 天。也就是说,浏览器提交的 sessionid 一旦 redis 查不到,就要求重新登录,登录成功后 |
3 yidinghe Sep 9, 2017 via Android (手滑)登录成功后同时往浏览器和 redis 记录新的 sessionid 即可。 |
4 caixiexin Sep 9, 2017 可以尝试另一个思路: CAS 认证完成后,由应用自己管理 session,应用预留登出接口,接受 CAS 统一登出的通知。然后应用的 Session 时长,爱多久就多久,放在 redis 里可以设置 redis 的缓存 expire 时间。 这样有个好处是,CAS 只作为认证服务器,不管理会话,CAS 哪天挂了,也不会影响已经登录的用户。 |
5 hantsy Sep 9, 2017 扔掉 CAS 吧。 Spring 官方子项目,Spring Session 支持 JDBC, Redis, Hazacast,Mongo 等,实现了 Servlet Session API, 通过 Servlet Wrapper(HttpRequestWrapper, HttpReponseWrapper) 接口运行替换了 Servlet Session, 所有 Servlet Session Event 都是自动支持。超时配置一下就行了,在 Spring Boot 在配置文件也可以设置。 Spring Session+Redis 已经应用多年,WEB, REST APIs 全部适合。一般来讲,传统 WEB 用 Cookie,REST 用 X-Auth-Token 完成 Authentication。 REST 使用例子: https://github.com/hantsy/spring-microservice-sample 看 Readme 文档。 |
6 vivaldi OP @hantsy 谢谢,扔掉 CAS 代价有点大,不过我用 Spring Session 代替了之前得 redis session 共享方案,并且替换掉了由 Tomcat 来管理 session,这样在我们项目中需要的改动比较小。替换 CAS 首先领导那里就比较难过,其次还是需要一些工作量。 |
7 vivaldi OP @caixiexin 感谢分享,很好的思路,比我们现在灵活多了,后面考虑能不能改成这种模式,现在我已经先用 Spring Session 给实现掉了,毕竟面向 deadline 编程 :) |
8 hantsy Sep 9, 2017 @vivaldi 代价真的不大。 用一个单独的 Auth 服务作安全认证(带 Login 界面),其它应用如果 Authentication Failed,返回 /login 时, 直接 Redirect (带上返回应用地址 Url )到 Auth 登录界面, 登录成功后,Redirected 到之前要返回的应用 Url (带上 Token, 即 Session ID,当然你可以加密) 返回到应用界面,所在的应用加一个 Filter 解析一下这个返回的 Token,设置 Cookie 即可,大功告成。 至于超时设置 Spring Session 很容易,另外 Session 在 Redis 中,你想怎么管理都行,暴露到管理界面,随时可以删除(踢掉)哪个连接的 Session。 另外,Spring Cloud Security 用 OAuth 2 可以完成这个 SSO 过程, 一个 @EnableOAuth2Sso 可以搞定了。看官方教程 https://spring.io/guides/tutorials/spring-security-and-angular-js/ 当然,我个人项目已经好几年没用传统 MVC,上次使用 CAS 已经是好久的事情(我基本没印象了),现在只使用 REST APIs (可能+Websocket ) 与外部交互,SSO 显然已经不重要了。 |