`
kevinpan45
  • 浏览: 20829 次
社区版块
存档分类
最新评论

CAS自定义登录页面

阅读更多
CAS服务端:
1.需要在cas-servlet.xml添加一个controller:remoteLoginController
<bean id="handlerMappingC"
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
<prop key="remoteLogin">remoteLoginController</prop>
</bean>

2.在添加一个对应的controller bean
<bean id="remoteLoginController" class="org.jasig.cas.expand.web.flow.RemoteLoginAction"
		p:argumentExtractors-ref="argumentExtractors"
		p:warnCookieGenerator-ref="warnCookieGenerator"
		p:centralAuthenticationService-ref="centralAuthenticationService"
		p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"></bean>


3.添加对应的Action

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.Service;
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import org.jasig.cas.client.util.CommonUtils;
import org.jasig.cas.ticket.TicketException;
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 RemoteLoginAction extends AbstractController {

	@NotNull
	private CentralAuthenticationService centralAuthenticationService;

	@NotNull
	private CookieRetrievingCookieGenerator warnCookieGenerator;
	@NotNull
	private CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator;

	private boolean pathPopulated = false;

	/** Extractors for finding the service. */
	@NotEmpty
	private List<ArgumentExtractor> argumentExtractors;

	protected ModelAndView handleRequestInternal(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String clientLoginUrl = request.getParameter("clientLoginUrl");
		request.setAttribute("clientLoginUrl", clientLoginUrl);
		request.getSession().setAttribute("clientLoginUrl", clientLoginUrl);
		logger.info("clientLoginUrl : " + clientLoginUrl);
		String uName = request.getParameter("username");
		String password = request.getParameter("password");
		UsernamePasswordCredentials credentials = null;
		if (CommonUtils.isNotBlank(uName) && CommonUtils.isNotBlank(password)) {
			credentials = new UsernamePasswordCredentials();
			credentials.setPassword(password);
			credentials.setUsername(uName);
		} else {
			return new ModelAndView(new RedirectView(clientLoginUrl));
		}
		if (!this.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.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) {
			return new ModelAndView(new RedirectView(clientLoginUrl));
		}
		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;
	}

}

4.修改一下登录成功会自动重定向到你提供的service地址,现在要做的是登录不成功的时候返回自定义的登录页面,需要修改casLoginView.jsp,直接重定向到clientLoginUrl
<% response.sendRedirect(request.getAttribute("clientLoginUrl").toString()); %>

CAC客户端:
1.web.xml的配置
网上都有,就不贴了
2.修改认证filter,添加clientLoginUrl给服务端认证失败时重定向使用
3.自定义登录页面
<form action="https://casip:casport/cas/remoteLogin"
		method="post">
		<input type="hidden" id="targetService" name="service"
			value="认证成功以后返回的URL" /> <input type="hidden"
			name="clientLoginUrl" value="自定义登录页面的URL" />
		<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 colspan="2"><input type="submit" value="登陆" /></td>
			</tr>
		</table>
	</form>

自己试试吧
分享到:
评论

相关推荐

    cas 自定义登录页面

    一、CAS自定义登录页面概述 CAS的默认登录页面是基于JSP的,但我们可以替换为HTML、React、Vue等其他技术栈构建的页面。自定义登录页面主要涉及以下几个步骤: 1. 创建自定义登录页面:首先,你需要设计并创建一个...

    cas自定义登录页面

    总的来说,CAS自定义登录页面涉及到Web开发和安全性理解,你需要熟悉HTML/CSS/JavaScript来定制界面,以及理解CAS的工作原理以确保正确配置。如果你希望对CAS有更深入的理解或进行更复杂的定制,可以学习相关的文档...

    CAS自定义加密和登录验证

    在本主题中,我们将深入探讨如何在CAS中进行自定义加密和登录验证。 首先,了解CAS的基本工作原理至关重要。CAS服务器作为认证中心,负责验证用户的身份。当用户尝试访问受保护的应用时,会被重定向到CAS服务器进行...

    Apereo CAS5.2.3 自定义登录页,验证码,扩展开发,注册功能

    完整项目在https://download.csdn.net/download/u010588262/10327539 这个资源是新增功能之后的main文件夹 对应博客系列:https://blog.csdn.net/u010588262/article/category/7548325 对应博客这篇:...

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

    在实现客户端自定义登陆页面时,需要遵守三个基本原则:不影响原有统一登陆界面功能、客户端应尽量保持简单、尽量保证原有功能的完整性和安全性。然而,需要注意的是,将登陆页面放到客户端本身就是降低了CAS的安全...

    CAS-3.2.1自定义客户端登录界面----完整篇

    由于实际内容没有给出,我将基于常见的CAS自定义登录流程进行讲解。 首先,理解CAS的工作原理至关重要。当用户尝试访问一个受CAS保护的应用时,会被重定向到CAS服务器的登录页面。在这里,用户输入凭证,如用户名和...

    CAS自定义界面

    在本项目中,我们面临的是一个自定义CAS界面的任务,这通常涉及到对CAS服务器默认登录界面的个性化设计,以满足特定的用户交互需求或企业品牌形象。 首先,了解CAS的基本工作原理是必要的。当用户尝试访问受CAS保护...

    CAS4.0 自定义客服端登陆界面,客服端与服务端

    cas4.0版本的 单点登录 自定义页面。希望对你有用,最低资源分,辛苦分。有问题可以交流学习。谢谢

    让CAS支持客户端自定义登陆页面——客户端篇

    标题中的“让CAS支持客户端自定义登陆页面——客户端篇”表明了本文主要探讨的是如何在中央认证服务(Central Authentication Service, CAS)系统中,允许客户端应用程序实现自定义登录页面的配置与实现。CAS是一个...

    cas修改登录页

    在实际应用中,为了满足企业或组织的个性化需求,往往需要对CAS默认的登录界面进行自定义,以提升用户体验或符合品牌风格。 【描述】"本项目旨在帮助开发者在CAS项目中集成并修改登录页面。用户可以直接将压缩包中...

    让CAS支持客户端自定义登陆页面----服务器篇--.doc编程资料

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

    cas-server-webapp

    改造cas,实现自定义登录页面,及错误跳转。具体参考我的博客 http://blog.csdn.net/just_lion/article/details/17204979

    cas源码修改-登录页面

    在“cas源码修改-登录页面”这个主题中,我们将深入探讨如何定制CAS服务器的登录界面以满足特定需求。 首先,CAS的登录页面通常位于`/login`路径下,这是由CAS服务器的核心组件处理的。在源码中,这部分主要涉及到`...

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

    1. **不影响原有统一登录界面功能**:确保自定义后的登录页面依然能够正常工作,不影响CAS的基本认证流程。 2. **客户端应尽量保持简单**:避免客户端侧过于复杂的配置或代码,降低维护难度。 3. **尽量保证原有功能...

    CAS实现不同应用展示不同的登录页

    当用户尝试访问受CAS保护的应用时,如果用户尚未登录,他们会被重定向到CAS服务器的登录页面。在这里,用户输入他们的凭证,如用户名和密码。一旦验证成功,CAS会生成一个服务票证(Service Ticket),并将用户...

    自定义客户端登录CAS服务器-iframe实现

    标题中的“自定义客户端登录CAS服务器-iframe实现”是指一种基于CAS(Central Authentication Service)的认证方式,它利用iframe在不离开当前页面的情况下实现用户的单点登录(Single Sign-On,SSO)。CAS是一种...

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

    ### 让CAS支持客户端自定义登录页面——服务器端配置详解 #### 一、背景与目的 随着企业级应用系统的不断扩展和发展,身份认证系统(如CAS)的安全性和灵活性变得尤为重要。CAS(Central Authentication Service)...

    CAS 单点登录 5.39 版本 自定义登录页面改造 响应式页面-附件资源

    CAS 单点登录 5.39 版本 自定义登录页面改造 响应式页面-附件资源

Global site tag (gtag.js) - Google Analytics