`
01jiangwei01
  • 浏览: 542845 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cas 系统实例 服务端配置(三) 自定义登录 不使用webFlow

    博客分类:
  • cas
 
阅读更多

1,修改org.jasig.cas.web.flow.InitialFlowSetupAction.java将pathPopulated属性改为public

2,在web.xm中添加

<servlet-mapping>
		<servlet-name>cas</servlet-name>
		<url-pattern>/noflow</url-pattern>
</servlet-mapping>

 3,在cas-servlet.xml中添加

<bean id="noflowLoginController" class="org.jasig.cas.web.my.noflowlogin.noFlowLoginAction"
    		p:argumentExtractors-ref="argumentExtractors"
    		p:warnCookieGenerator-ref="warnCookieGenerator"
    		p:centralAuthenticationService-ref="centralAuthenticationService"
    		p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"
    		p:initialFlowSetupAction-ref="initialFlowSetupAction"
    	></bean>

 修改bean,黑体为新增

<bean
		id="handlerMappingC"
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property
			name="mappings">
			<props>
				<prop
					key="/logout">
					logoutController
				</prop>
				<prop
					key="/serviceValidate">
					serviceValidateController
				</prop>
				<prop
					key="/validate">
					legacyValidateController
				</prop>
				<prop
					key="noflow">
					noflowLoginController
				</prop>
				 

				<prop
					key="/proxy">
					proxyController
				</prop>
				<prop
					key="/proxyValidate">
					proxyValidateController
				</prop>
				<prop
					key="/samlValidate">
					samlValidateController
				</prop>
				
				<prop
					key="/services/add.html">
					addRegisteredServiceSimpleFormController
				</prop>
				
				<prop
					key="/services/edit.html">
					editRegisteredServiceSimpleFormController
				</prop>
				
				<prop
					key="/services/loggedOut.html">
					serviceLogoutViewController
				</prop>

                <prop key="/services/viewStatistics.html">
                    viewStatisticsController
                </prop>
			
				<prop key="/services/*">manageRegisteredServicesMultiActionController</prop>
				<prop key="/openid/*">openIdProviderController</prop>
                <prop key="/authorizationFailure.html">passThroughController</prop>
                <prop key="/403.html">passThroughController</prop>
			</props>
		</property>
		<property
			name="alwaysUseFullPath" value="true" />
		<!--
		uncomment this to enable sending PageRequest events. 
		<property
			name="interceptors">
			<list>
				<ref bean="pageRequestHandlerInterceptorAdapter" />
			</list>
		</property>
		 -->
	</bean>

 4,noFlowLoginAction类的具体内容为:

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.NotEmpty;
import org.jasig.cas.CentralAuthenticationService;
import org.jasig.cas.authentication.principal.Credentials;
import org.jasig.cas.authentication.principal.Service;
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import org.jasig.cas.ticket.TicketException;
import org.jasig.cas.web.flow.InitialFlowSetupAction;
import org.jasig.cas.web.support.ArgumentExtractor;
import org.jasig.cas.web.support.CookieRetrievingCookieGenerator;
import org.jasig.cas.web.support.WebUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.view.RedirectView;

public class noFlowLoginAction extends AbstractController {
	
	
	   @NotNull
	   private CentralAuthenticationService centralAuthenticationService;
	     
	  	@NotNull
	    private CookieRetrievingCookieGenerator warnCookieGenerator;
	 	@NotNull
	    private CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator;
	 	
	 	private InitialFlowSetupAction initialFlowSetupAction;
	 
	 
	   
	    /** Extractors for finding the service. */
	    @NotEmpty
	    private List<ArgumentExtractor> argumentExtractors;
	    protected ModelAndView handleRequestInternal(HttpServletRequest request,
				HttpServletResponse response) throws Exception {
	    	
	    	String uName = request.getParameter("username");
	    	String password = request.getParameter("password");
	    	Credentials credentials =new UsernamePasswordCredentials(uName,password);
	    	if (!this.initialFlowSetupAction.pathPopulated) {
	            final String contextPath = request.getContextPath();
	            final String cookiePath = StringUtils.hasText(contextPath) ? contextPath + "/" : "/";
	            logger.info("Setting path for cookies to: "
	                + cookiePath);
	            this.warnCookieGenerator.setCookiePath(cookiePath);
	            this.ticketGrantingTicketCookieGenerator.setCookiePath(cookiePath);
	            this.initialFlowSetupAction.pathPopulated = true;
	        }
	    	 final Service service = WebUtils.getService( this.argumentExtractors, request);
	    	 String ticketGrantingTicketId="";
	    	 String serviceTicket = "";
	 		try {
	 			ticketGrantingTicketId = this.centralAuthenticationService.createTicketGrantingTicket(credentials);
	 			
	 			/***
	        	 * 产生新的票据,并将票据及服务记录在缓存中
	        	 */
	 			serviceTicket=	 this.centralAuthenticationService.grantServiceTicket(ticketGrantingTicketId,service);
	 			
	 			this.ticketGrantingTicketCookieGenerator.removeCookie(response);
	 			
	 			this.ticketGrantingTicketCookieGenerator.addCookie(request, response, ticketGrantingTicketId);
	 		 
	 			this.warnCookieGenerator.addCookie(request, response, "true");
	 			 
	 		} catch (TicketException e) {
	 			 
	 			e.printStackTrace();
	 		}
	 		return new  ModelAndView(new RedirectView(request.getParameter("service")+"?ticket="+serviceTicket));
		}
	    
  
	    
	    public void setWarnCookieGenerator(final CookieRetrievingCookieGenerator warnCookieGenerator) {
	        this.warnCookieGenerator = warnCookieGenerator;
	    }
	    public void setArgumentExtractors(
	        final List<ArgumentExtractor> argumentExtractors) {
	        this.argumentExtractors = argumentExtractors;
	    }
	    public final void setCentralAuthenticationService(final CentralAuthenticationService centralAuthenticationService) {
	        this.centralAuthenticationService = centralAuthenticationService;
	    }
	    public void setTicketGrantingTicketCookieGenerator(
	            final CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator) {
	            this.ticketGrantingTicketCookieGenerator = ticketGrantingTicketCookieGenerator;
	        }



		public void setInitialFlowSetupAction(
				InitialFlowSetupAction initialFlowSetupAction) {
			this.initialFlowSetupAction = initialFlowSetupAction;
		}	
	  
}
 

5,使用方法是:

 

    <form action="http://localhost:8081/casserver/noflow" method="post">
   	 <table>
   	 		<input type="hidden" id="targetService" name="service" value="http://localhost:8081/casclient4/sso/index.jsp">
            <input type="hidden" name="failpae" value="http://localhost:8081/casclient4/index.jsp">
            <table>
                <tr>
                    <td>用户名:</td>
                    <td><input type="text" name="username"></td>
                </tr>
                <tr>
                    <td>密&nbsp;&nbsp;码:</td>
                    <td><input type="password" name="password"></td>
                </tr>
                <tr><td>验证码</td>
                <td><input type="text" /><img
									src="http://localhost:8081/casserver/random"
									class="sign_img fl mt5"  /></td></tr>
                <tr>
                    <td colspan="2"><input type="submit" value="登陆" /></td>
                </tr>
                
            </table>
   	 </table>
    
    </form>
 

 

 6,你可以自己测试了

 

分享到:
评论
4 楼 wqmain 2013-04-28  
你好,按照你的配置,我下面这行在运行是报错:
serviceTicket = this.centralAuthenticationService.grantServiceTicket(ticketGrantingTicketId, service);

报错如下:
java.lang.IllegalArgumentException: 'resourceOperatedUpon' cannot be null.
Check the correctness of @Audit annotation at the following audit point: execution(public abstract java.lang.String org.jasig.cas.CentralAuthenticationService.grantServiceTicket(java.lang.String,org.jasig.cas.authentication.principal.Service))
	at com.github.inspektr.audit.AuditActionContext.assertNotNull(AuditActionContext.java:81)
	at com.github.inspektr.audit.AuditActionContext.<init>(AuditActionContext.java:64)
	at com.github.inspektr.audit.AuditTrailManagementAspect.executeAuditCode(AuditTrailManagementAspect.java:149)
	at com.github.inspektr.audit.AuditTrailManagementAspect.handleAuditTrail(AuditTrailManagementAspect.java:139)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)


debug发现参数service为空,但argumentExtractors集合是有内容的,请问原因?我cas服务端版本3.5   访问方式:http://localhost/cas/noflow?username=abc&password=123
3 楼 kevinpan45 2012-11-07  
你好,Credentials credentials =new UsernamePasswordCredentials(uName,password);这个代码提示没有这种构造方法。我用这样的方法构造,但是用credentials 生成ticket的时候
引用

ticketGrantingTicketId = this.centralAuthenticationService
.createTicketGrantingTicket(credentials);

报了这个异常
引用

TicketCreationException: error.authentication.credentials.bad

请问你的CAS SERVER是什么版本
2 楼 01jiangwei01 2012-06-05  

查看“cas 系统实例 客户端配置”  解决你的问题
1 楼 tiansskk 2012-05-09  
不错很有用,那如何在客户端取值?

相关推荐

    cas 系统实例 服务端配置(一)

    标题 "cas 系统实例 服务端配置(一)" 提到的是 CAS(Central Authentication Service)系统的一个服务端配置教程。CAS 是一个开源的身份验证框架,主要用于实现单一登录(Single Sign-On, SSO)。在本教程中,我们...

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录...通过学习和实践,你可以掌握CAS的核心概念,实现自定义认证策略,以及优化客户端集成,从而为你的项目构建一个强大而安全的单点登录系统。

    cas 自定义登录页面

    CAS(Central Authentication Service)是一种广泛使用的开放源代码单点登录(Single Sign-On,SSO)框架,它允许用户通过一个中央认证服务访问多个应用系统,而无需为每个系统单独进行登录。在实际的企业环境中,...

    CAS自定义加密和登录验证

    CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源身份验证框架,主要用于实现单点登录(Single Sign-On,SSO)。在本主题中,我们将深入探讨如何在CAS中进行自定义加密和登录验证。 首先...

    第七节:CAS4.0.0 以上服务端配置多个数据源

    在CAS 4.0.0中,服务端配置多个数据源可以使CAS能够管理多个数据库的认证和授权信息。 首先,我们需要理解数据源(DataSource)的概念。在Java应用中,数据源是连接数据库的桥梁,它负责管理数据库连接,提供连接池...

    让CAS支持客户端自定义登陆页面——服务器篇.docx

    CAS作为一种广泛使用的单点登录解决方案,在提供强大认证服务的同时,也允许一定程度上的定制化需求满足,例如允许客户端自定义登录页面。 #### 修改原则 在进行此类定制化操作之前,需要明确以下几个基本原则: ...

    cas 服务端和客户端 main是自定义服务端登陆页面 还有一个是5.2.3原版

    CAS(Central Authentication Service)是一种基于Web的单点登录(Single Sign-On, SSO)协议,广泛应用于企业级应用系统中,以实现用户统一身份验证。在这个整合项目中,CAS服务端与客户端的角色得到了清晰的划分,...

    cas自定义登录页面

    在你的场景中,你使用的是CAS-server-3.5.2版本,这是一个较旧但仍然广泛使用的版本,提供了自定义登录页面的功能。 首先,让我们深入了解一下CAS的基本工作流程: 1. **CAS服务器初始化**:CAS服务器是核心组件,...

    cas单点登录服务端

    在IT领域,单点登录系统已经成为提高用户体验和安全管理的重要工具。 在你提供的压缩包文件中,我们可以推测包含的是CAS服务端的相关部署文件。接下来,我们将详细探讨如何部署和使用CAS服务端。 首先,解压缩文件...

    cas原理 webflow mvc ioc

    在CAS服务器端,WebFlow负责管理登录流程,其配置主要在`/WEB-INF/login-webflow.xml`文件中进行。该文件定义了一系列状态(State),包括决策状态(Decision)、动作状态(Action)、视图状态(View)和初始/最终...

    CAS4.1.4服务端和客户端实例

    CAS4.1.4是CAS的一个特定版本,该版本包含了服务端和客户端的实现,使得用户只需一次登录就可以访问多个相互信任的应用系统。 在CAS4.1.4中,服务端是核心组件,负责验证用户的凭证(如用户名和密码),并为客户端...

    让CAS支持客户端自定义登陆页面——服务器篇[参考].pdf

    这一过程中涉及到的配置文件包括`web.xml`、`cas-servlet.xml`和`remoteLogin-webflow.xml`,通过这些配置,可以满足特定客户群体对登录页面定制化的需求,同时需要严格遵循提升用户体验、确保系统完整性和安全性的...

    cas服务端完整构建

    若能正常显示登录界面,则说明服务端配置成功。 ##### 2.2 在MyEclipse中创建CAS服务端 1. **创建CAS Web项目** 打开MyEclipse,选择`File` -&gt; `New` -&gt; `Dynamic Web Project`来创建一个新的动态Web项目。 2. ...

    Cas5.2.6(cas-overlay-template-5.2.6)服务端

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。在你提供的资料中,"Cas5.2.6(cas-overlay-template-5.2.6)服务端...

    落雨博客基于CAS框架的单点登录技术讲解(ppt+code实例+doc)配套资料

    [置顶] SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) http://blog.csdn.net/ae6623/article/details/8851801 [置顶] SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas...

    单点登录服务端项目cas-server

    直接可以对cas-server项目进行打不,部署到tomcat,即可使用,记得修改cas-server的数据库连接地址哦 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目...

    cas服务端和客户端可用代码

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,它允许用户通过一个统一的身份验证入口点登录,然后在多个应用系统间自由切换,而无需再次进行身份验证。这个给定的...

    CAS服务端文件下载

    CAS(Central Authentication Service)是基于Web的单一登录(Single Sign-On, SSO)协议的开源项目,主要用于身份验证。在本项目中,我们关注的是CAS服务端的文件下载部分,这意味着我们将探讨如何设置和配置CAS...

    cas 普通方式和SpringBoot方式客户端 普通方式服务端

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。在本文中,我们将探讨如何在普通方式和Spring Boot方式下配置和...

Global site tag (gtag.js) - Google Analytics