`
magicbear
  • 浏览: 28394 次
  • 性别: 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  
很不错,收藏了,

相关推荐

Global site tag (gtag.js) - Google Analytics