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

SSO CAS Srpring MVC

    博客分类:
  • SSH
阅读更多
知识在于总结,两个月前做的东西,现在就感觉有点模糊,更别提以后了,所以定期的总结是很必要的。
前段时间项目上了sso,用的是耶鲁大学的CAS,关于sso就不啰嗦太多给出一个链接,这里讲的已经很详细了http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html
这个CAS里面用的是spring的mvc,以前看spring的时候,mvc都是忽略的,因为很少用。这次用到它还真有点抓狂,所以临时抱佛脚,捧了三本书加上网查资料(这方面的资料较少),终于把基本功能实现了。
下面开始码代码:
1、在web.xml中添加servlet
	<servlet>
		<servlet-name>ssologin</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>ssologin</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>

2、它对应去WEB-INF下的ssologin-servlet.xml里去查找实现的配置文件
<bean name="modify" class="com.sso.creditnet.web.UserControler">
		<property name="userservice" ref="userservice" />
		<property name="sessionForm">
			<value>true</value>
		</property>
		<property name="commandName">
			<value>User</value>
		</property>
		<property name="commandClass">
			<value>com.sso.creditnet.pojo.User</value>
		</property>
		<!-- 校验器 -->
		<property name="validator">
			<ref bean="userValidator"/>
		</property>
		
		<property name="formView"><value>modifyuser</value></property>
        <property name="successView"><value>modifySuccess</value></property>
		
	</bean>
	
    <bean name="find" class="com.sso.creditnet.web.FindUserControler">
		<!-- 注入一个userservice -->
		<property name="userservice" ref="userservice" />
		<property name="sessionForm">
			<value>true</value>
		</property>
		<property name="commandName">
			<value>User</value>
		</property>
		<property name="commandClass">
			<value>com.sso.creditnet.pojo.User</value>
		</property>

		
		<property name="formView"><value>finduser</value></property>
        <property name="successView"><value>modifySuccess</value></property>
		
	</bean>	
	<!-- 这里使用SimpleUrlHandlerMapping 控制器映射 功能强大 支持通配符表示 -->
	<!-- 所用的*.html都被DispatcherServlet拦截 -->
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/modifyuser.html">modify</prop>
                <prop key="/finduser.html">find</prop>
               
            </props>
        </property>
    </bean>
 	<!-- 定义视图 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>
        <property name="prefix"><value>/WEB-INF/view/</value></property>
        <property name="suffix"><value>.jsp</value></property>
    </bean>

3、这里要实现的功能是对用户的密码进行修改和找回,所以要对一个form进行操作,这里要注意的是最错误页面的处理,因为前台用的是spring的标签,所以必须按照ModelAndView的格式填充进去。
public class UserControler extends SimpleFormController {

	private IUserService userservice;

	public void setUserservice(IUserService userservice) {
			this.userservice = userservice;
		}
	
	//设置命令类
//    public void doSubmitAction(Object command) {
//    	User user = (User) command;
//    	user.setUsername("root");
//    	/*
//		     * The givenData object now contains the successfully validated data
//		     * from the form, so can be written to a database, or whatever.
//		     */
//		 }

	public ModelAndView onSubmit(HttpServletRequest request,
			HttpServletResponse response,Object command, BindException ex)throws Exception{
	    User user = (User)command;
	    user.setUsername("root");

	    if(userservice.updateUser(user)){
	    	return new ModelAndView(this.getSuccessView());
	    }else{
	    	request.setAttribute("user", "user");
	    	return new ModelAndView(this.getFormView(),this.getCommandName(),user);
	    }
	}

}

4、校验
public class userValidator  implements Validator{
	//注入正则表达式
	private String exp;
	private static final String EXP="[a-zA-Z0-9]{6,15}";
	public void setExp(String exp) {
		this.exp = exp;
	}

	public boolean supports(Class arg0) {
		
		return arg0.equals(User.class);
	}

	public void validate(Object obj, Errors e) {
		User user = (User)obj;
		if(user.getPassword().equals("")){
			e.rejectValue("password", "error.not-specified", null, "必须输入");
		}else if(user.getPassword1().equals("")){
			e.rejectValue("password1", "error.not-specified", null, "必须输入");
		}else if(user.getPassword2().equals("")){
			e.rejectValue("password2", "error.not-specified", null, "必须输入");
		}else if(!user.getPassword1().equals(user.getPassword2())){
			e.rejectValue("password2", "error.equals", null, "两次输入密码必须一致");
		}else if(!Pattern.matches(EXP, user.getPassword1())){
			e.rejectValue("password1", "error.invalid", null, "请输入正确格式");
		}
	}

	public String getExp() {
		return exp;
	}

}

5、service层和dao层就没必要过多的说了。只是要提下,这里持久化用的是jdbc,dao里用的是spring的getJdbcTemplate()
Object[] args = {user.getPassword1(),user.getUsername()};
		
		getJdbcTemplate().update("update user set password = ? " +
				"where username = ? ", args);

6、前台的jsp页面
<html>
	<head>
		<title>用户密码修改</title>
	</head>
	<body>
		<c:if test="${user!=null}">修改失败,请重新输入</c:if>
		<form action="modifyuser.html" method="post">
			<spring:bind path="User.password">
			请填写旧密码:<input type="text" name="password" value="<c:out value="${status.value}"/>"/>&nbsp;&nbsp;<c:out value="${status.errorMessage}"/>
			</spring:bind>	<br>
			
			<spring:bind path="User.password1">
			请输入新密码:<input type="text" name="password1" value="<c:out value="${status.value}"/>"/>&nbsp;&nbsp;<c:out value="${status.errorMessage}"/>
			</spring:bind><br>
			<spring:bind path="User.password2">
			重复输入新密码:
			<input type="text" name="password2" value="<c:out value="${status.value}"/>"/>&nbsp;&nbsp;<c:out value="${status.errorMessage}"/>
			</spring:bind><br>
			<input type="submit" value="确认修改">
		</form>
	</body>
</html>

7、总结
至此,spring的mvc功能基本实现了,给我的感觉是分得太细了,有点繁琐,大家不怎么用它,所以相关资料也比较少。虽然上面罗列的代码比较简单,但是在这做一个总结,起码以后不是从零开始了。
分享到:
评论
3 楼 larva 2009-10-21  
这个与CAS有什么关系?
2 楼 melody404 2008-12-17  
不错,很有质量 希望楼主经常总结
1 楼 jelver 2008-12-06  
很不错,收藏了,

相关推荐

    SSO CAS Server 二次开发说明文档

    ### SSO CAS Server 二次开发说明文档 #### 环境搭建 为了便于进行二次开发,推荐使用Maven overlays特性来构建开发环境。这样可以利用最新版本的资源文件覆盖现有WAR包中的文件,无需手动导入整个`cas-server-...

    网上简单的SSO CAS 单点登录源码

    CAS(Central Authentication Service)是 Yale 大学开源的一个SSO协议,广泛应用于企业级应用环境中。本源码集合为一个简单的Java实现的SSO CAS单点登录示例,适合初学者理解和实践SSO原理。 首先,我们需要理解...

    sso cas server原始代码

    CAS(Central Authentication Service)是耶鲁大学开发的一个开源SSO项目,它为各种应用提供了一个统一的认证入口。在本压缩包中,我们拥有SSO CAS服务器的原始代码,这为我们提供了深入了解和定制SSO解决方案的机会...

    Java进阶SSO单点登录技术CAS-快速上手与原理探究视频教程

    本课程主要通过CAS来实现SSO,本教程会从最基本的基础知识讲起,由浅入深再到实战,完成多应用的单点登录功能。 本课程内容如下: 1、 什么是SSO和CAS 2、 CAS Server服务端和客户端的搭建和配置 3、 单点登录和单...

    SSO之CAS单点登录详细教程.docx

    SSO之CAS单点登录详细教程.docx

    SSO CAS 整理 - 页面备份

    CAS (Central Authentication Service) 是一个开源的SSO框架,广泛应用于教育和企业环境中。这篇整理主要围绕着如何搭建和配置CAS 5.x版本进行,下面将对涉及的知识点进行详细讲解。 1. **CAS 5.x 搭建基础**: ...

    CAS-SSO源码包(两个版本)

    CAS(Central Authentication Service)是基于Java的开源身份验证框架,主要用于实现单一登录(Single Sign-On, SSO)。SSO允许用户在一次登录后访问多个应用系统,而无需为每个系统分别进行认证,大大提升了用户...

    SSO CAS单点登录配置教程

    CAS(Central Authentication Service)是耶鲁大学开源的SSO解决方案,它提供了一种集中式的身份验证服务,简化了用户管理和安全认证流程。 本教程将详细介绍如何配置CAS以实现SSO。首先,我们需要理解CAS的基本...

    如何sso(cas)

    NULL 博文链接:https://wangchao-17915566.iteye.com/blog/334582

    CAS SSO 原理

    CAS(Central Authentication Service)是由Yale大学发起的开源项目,它是实现SSO的一种常见解决方案,尤其在Java项目中广泛应用。据称,大约80%的开源Web SSO项目选择了CAS。CAS的设计理念是简单高效且安全,其核心...

    cas_sso.rar_CAS_CAS SSO_cas文档_sso C_单点登录

    **CAS单点登录系统详解** CAS(Central Authentication Service,中央认证服务)...`定制CAS登录验证.pdf`文档很可能是对这一过程的详细指南,对于想要深入了解和实践CAS SSO的IT专业人员来说,是一份宝贵的参考资料。

    SSO之CAS单点登录详细图文教程

    CAS是耶鲁大学开源的一个SSO解决方案,它为Web应用程序提供了一个集中式的认证服务。以下是本教程涉及的主要知识点: 1. **CAS架构**:CAS由三个主要组件组成:CAS服务器、CAS客户端和用户浏览器。用户首先向CAS...

    sso shiro cas coderhuang

    【SSO、CAS与Shiro:理解与应用】 在当今的Web开发中,单点登录(Single Sign-On,简称SSO)已经成为企业级系统中不可或缺的一部分。SSO允许用户通过一次登录,就能访问多个相互独立的应用系统,极大地提高了用户...

    MVC SSO 单点登陆完整demo

    在Web应用程序中,MVC(Model-View-Controller)架构常被用来构建SSO系统,因为它提供了良好的结构和可扩展性。`SmartSSO-master`这个压缩包文件很可能包含了一个基于MVC模式实现的SSO解决方案的完整示例。 在SSO...

    CAS_LDAP.rar_CAS SSO_cas ldap_cas openldap_cas_ldap_soa和sso

    在这个场景下,`CAS_LDAP.rar` 文件集合提供了一个关于如何将CAS与OpenLDAP集成以实现SSO和SOA的实践指南。 **CAS (Central Authentication Service)** CAS 是一个开源的、基于Web的单一登录协议服务器,它允许...

    sso/cas单点登录Java maven版 含服务端客服端

    CAS(Central Authentication Service)是SSO的一种实现,由耶鲁大学开发并开源,它提供了一个中心化的认证服务器和一系列协议来实现SSO。本项目是一个基于Java Maven构建的SSO解决方案,包括服务端和客户端两部分。...

    CAS-SSO-TRIAL.zip_CAS_CAS SSO_java sso_sso

    标题中的"CAS-SSO-TRIAL.zip"指的是一个关于CAS(Central Authentication Service)单一登录(Single Sign-On, SSO)的试验性压缩文件。这个压缩包包含了与SSO相关的资源,特别是用Java和.NET两种技术实现的示例。...

    SSO之CAS单点登录客户端服务端jar包

    在"SSO之CAS单点登录客户端服务端jar包"中,包含的是实现CAS单点登录功能所需的客户端和服务端组件。这些jar包包含了以下关键知识点: 1. **CAS服务器**:这是整个SSO架构的核心,负责处理用户的登录请求,验证凭证...

    CAS(SSO)-.zip_CAS_CAS SSO_java sso_sso java

    CAS(Central Authentication Service,中央认证服务)是Java社区开发的一个开源SSO解决方案,它为Web应用提供了统一的认证和授权服务。 CAS的核心概念包括以下几个部分: 1. **CAS服务器**:这是SSO的核心,负责...

Global site tag (gtag.js) - Google Analytics