我们在JASIG CAS作为身份验证服务器的帮助下,在我们的应用程序中实现了“单点登录”。
现在我们需要一个设置,其中每个用户只能在CAS中创建一个会话/票证。
如果用户尝试从其他系统/浏览器登录,则CAS将使用户的当前故障单无效,并从之前的会话/浏览器中注销他/她。
答案 0 :(得分:2)
最后,我找到了解决问题的方法。希望它能帮助别人。
Jasig Cas本身使用内存映射来跟踪为用户分配的故障单。我使用类似的方法来达到要求: -
为了实现功能,项目中添加了一些额外的功能。更改如下: -
“SingleSesionTicketRegistry”类的实现,该类将地图中的会话票据维护为默认行为,但如果地图中已存在用户票证,则注册表将使前一会话无效。
修改Cas配置以使用Mysql数据库进行身份验证,其中密码为MD5哈希。
以下是必须在项目中完成的配置更改: - 1. src / main / resources / application.properties
#Toggle the feature if Single Session.
is.single.sesion.per.user=true
#MySQL query to check the authentication.
user.authentication.sql=select password from user where email=? and is_active=1
/src/main/webapp/WEB-INF/spring-configuration/ticketRegistry.xml
<!--Comment the default ticket regitry. -->
<!-- <bean id="ticketRegistry" class="org.jasig.cas.ticket.registry.DefaultTicketRegistry" /> -->
<!--Add the custom ticket regitry. -->
<bean id="ticketRegistry" class="com.naval.cas.SingleSesionTicketRegistry"
p:isSingleSesionPerUser="${is.single.sesion.per.user}"
p:logoutManager-ref="logoutManager"/>
/src/main/webapp/WEB-INF/deployerConfigContext.xml
<!--Add the Following code block -->
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
c:encodingAlgorithm="MD5"
p:characterEncoding="UTF-8" />
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:passwordEncoder-ref="passwordEncoder"
p:sql="${user.authentication.sql}" />
单会话票证注册表类可以在下面的github repo中找到。