CAS实现URL扩展参数
以前用CAS3.3.1实现了一个SSO单点登录,这次遇到一个新需求。
用户想用一个URL链接过来登录,同时要根据URL传递过来的参数转向到一个用户自己定义的页面。
比如,当一封邮件发送给用户后,用户能点击这个LINK直接转向到我们的系统,登录,并转向到用户想要看到的某个特定页面:
<a href="http://localhost:8088/cascenter2/login?auto=true&username=admin&password=111111&service=http://localhost:8088/itsmadmin/j_spring_cas_security_check?spring-security-redirect=http://localhost:8088/itsmadmin/user/list.do">Link</a>
这个链接里面传递了三个参数
username用户名
password密码
service是要转向的页面,其中分了两部分,
http://localhost:8088/itsmadmin/j_spring_cas_security_check 是要转向的WAR包的认证路径
spring-security-redirect 是专项该WAR认证成功后转向的URL
要完成这个功能,需要对CAS3.3.1的源码做稍微改动
org.jasig.cas.CentralAuthenticationServiceImpl 这个类为CAS认证TICKET的入口,不用改动
org.jasig.cas.ticket.ServiceTicketImpl 这个类里面的方法
public boolean isValidFor(final Service serviceToValidate) {
updateState();
return serviceToValidate.matches(this.service);
}
会去验证,这个service参数和spring-security配置里面的service是否一致
<beans:bean id="serviceProperties"
class="org.springframework.security.ui.cas.ServiceProperties">
<beans:property name="service" value="${cas.client.itsmadmin}/j_spring_cas_security_check" />
<beans:property name="sendRenew" value="false" />
</beans:bean>
但这里的service是WAR里面固定的,不会根据参数的不同而改变。所以不修改这里会导致
org.jasig.cas.CentralAuthenticationServiceImpl这个类里面的如下行报错:
if (!serviceTicket.isValidFor(service)) {
if (log.isErrorEnabled()) {
log.error("ServiceTicket [" + serviceTicketId
+ "] with service [" + serviceTicket.getService().getId() + " does not match supplied service [" + service + "]");
}
throw new TicketValidationException(serviceTicket.getService());
}
我用比较土的办法,修改了
org.jasig.cas.ticket.ServiceTicketImpl 这个类里面的方法
public boolean isValidFor(final Service serviceToValidate) {
updateState();
//return serviceToValidate.matches(this.service);
return true;
}
然后重新打包一下
到这个路径
E:\book\opensource\cas\cas-server-3.3.1\cas-server-core
命令:
mvn clean
mvn -DskipTests=true package
结果这个版本的pom.xml好像有点错误,报错找不到这个类:
找不到类MapAdaptable
org.springframework.binding.collection.MapAdaptable
我修改了pom.xml文件,增加了spring-binding
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-binding</artifactId>
<version>1.0.5</version>
<scope>compile</scope>
</dependency>
打包成功。
使用POST方式传递三个参数到过去已经可以正常登陆了。发现在URL传递的时候却要报错用户名和密码错误。
修改了cascenter2/WebContent/WEB-INF/view/jsp/customer/ui/casLoginView.jsp
里面的
<form style="display:none" method="post" action="<%=response.encodeRedirectURL("login" + (StringUtils.hasText(request.getQueryString()) ? "?" + request.getQueryString() : ""))%>">
为
<form style="display:none" method="post" action="<%=response.encodeRedirectURL("login")%>">
就OK了。
但是新问题出来了,当输入用户名和密码错误的时候,不能返回到登陆页面并提示,原来是因为我把QUERYSTRING省略了的原因
改为
<form style="display:none" method="post" action="<%=response.encodeRedirectURL("login" + "?auto=true")%>">
就OK了。
分享到:
相关推荐
标题中的“cas-client扩展拦截器支持excludes”指的是在CAS(Central Authentication Service)客户端的实现中,对拦截器功能进行了扩展,增加了排除特定路径的功能。这通常是为了在使用CAS进行统一认证时,允许某些...
6. CAS扩展性:除了基本的SSO功能,CAS还提供了许多可扩展的功能,如MFA(多因素认证)、审计日志、API访问控制等,可以根据业务需求进行定制。 7. 测试与调试:集成完成后,你需要进行详尽的测试,确保在各种情况...
同样需要配置CAS服务器URL、服务URL等参数。phpCAS提供了方便的API来集成CAS登录和登出逻辑。 在实际开发中,还需要考虑以下几点: - **安全性**:确保CAS服务器和客户端之间的通信是通过HTTPS进行,以防止中间人...
CAS的配置和集成过程可能涉及修改web.xml文件,配置CasFilter和CasAssertionSecurityFilter等组件,以及设置相关参数,如cas服务器地址、服务URL等。 总之,CAS提供了一种简单而强大的SSO解决方案,适用于多种环境...
【CAS Client集成】在Tomcat中,可以通过Filter配置保护Web应用资源,比如在web.xml中添加CAS Client的过滤器配置,设置Service URL以及CAS Server的相关参数。 总结来说,实现使用CAS在Tomcat6中进行单点登录,...
在实际部署和使用过程中,开发者需要根据应用环境配置CAS服务器和客户端的相关参数,例如服务URL、认证源、Ticket验证策略等。同时,为了保障安全性,需要考虑SSL/TLS配置、防火墙规则以及监控和审计机制。 总之,`...
- **配置属性文件**:创建`cas.properties`文件,设置CAS服务器的URL、票证验证URL等相关参数。 **4. 源码分析** `cas-client-core-3.4.1-sources.jar` 包含了CAS客户端的源代码,这对于开发者理解CAS的工作机制、...
根据提供的文件信息,我们可以分析出以下知识点: ### 单点登录(SSO)技术 单点登录是指用户仅需要一次身份验证,就可以访问多...这些内容为集成框架中使用CAS实现单点登录技术方案提供了全面的技术支持和实施指导。
CAS(Central Authentication Service)是基于Java的开源身份验证框架,用于在网络上实现单点登录(Single Sign-On, SSO)。在本场景中,"cas_client.zip" 是一个包含CAS客户端组件的压缩包,它使得应用程序能够与...
然后在Spring Boot应用中,需要添加对CAS客户端库的依赖,并创建一个CAS配置类,用于设置CAS服务器的URL、服务验证URL等参数。通过`CasAuthenticationProvider`,Spring Security可以与CAS服务器通信,进行用户的...
3. **CAS与Spring Security整合**:使用`CasAuthenticationProvider`作为认证提供者,并配置`CasServerUrlPrefix`等参数,让Spring Security知道如何与CAS服务器通信。 4. **自定义过滤器链**:可能需要自定义过滤...
在.NET项目中,你可以根据需求扩展CAS客户端库,比如添加自定义登录界面、处理特定的认证失败情况,或者集成特定的用户信息存储。 7. **测试和调试**: 使用提供的`demo`项目进行测试,确保在不同场景下(如正常...
4. **自定义配置**:客户端通常允许开发者定制配置,比如设置URL、安全参数等。3.2.1版本可能提供了更灵活的配置选项。 5. **多语言支持**:虽然主要基于Java,但CAS客户端也可能支持其他编程语言的库,使得非Java...
7. **配置**:集成CAS客户端到.NET应用需要正确的配置,包括CAS服务器的URL、服务的定义以及票证验证的参数等。 8. **安全考虑**:使用SSO系统虽然方便了用户,但也增加了系统的复杂性,因此需要关注安全性。例如,...
CAS(Central Authentication Service)协议3.0是一个用于网络身份认证的开源协议,其设计目的是为了实现单点登录环境。在这一协议中,用户只需要进行一次身份验证,便可以获得对多个应用系统的访问权限。这种方式...
2. **客户端集成**:在每个需要实现SSO的应用中,引入CAS客户端库,配置CAS服务器的URL和其他相关设置,比如服务端验证URL、服务端登录URL等。 3. **自定义认证**:如果需要使用特定的认证方式(例如LDAP、数据库)...
- **配置**:修改`conf/cas.properties`配置文件,根据你的环境设置数据库连接、服务URL、邮件服务器等参数。 - **自定义服务**:如果你有自定义的服务需要接入CAS,需要在`services`目录下创建服务定义文件,并在...
同时,考虑使用`phpCAS::client()`方法的`$forceRenewal`参数,强制CAS服务器验证每个请求,防止使用过期的票据。 在具体实践中,可以按照以下步骤操作: 1. 初始化phpCAS客户端,设置CAS服务器的URL。 2. 使用`...
这通常涉及修改应用的web.xml文件,配置CAS服务器地址、服务验证URL等参数,以便应用能与CAS Server进行身份验证交互。 ### CAS工作原理 CAS的工作流程大致如下: 1. 用户尝试访问受保护的应用系统。 2. 应用系统...