知识在于总结,两个月前做的东西,现在就感觉有点模糊,更别提以后了,所以定期的总结是很必要的。
前段时间项目上了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}"/>"/> <c:out value="${status.errorMessage}"/>
</spring:bind> <br>
<spring:bind path="User.password1">
请输入新密码:<input type="text" name="password1" value="<c:out value="${status.value}"/>"/> <c:out value="${status.errorMessage}"/>
</spring:bind><br>
<spring:bind path="User.password2">
重复输入新密码:
<input type="text" name="password2" value="<c:out value="${status.value}"/>"/> <c:out value="${status.errorMessage}"/>
</spring:bind><br>
<input type="submit" value="确认修改">
</form>
</body>
</html>
7、总结
至此,spring的mvc功能基本实现了,给我的感觉是分得太细了,有点繁琐,大家不怎么用它,所以相关资料也比较少。虽然上面罗列的代码比较简单,但是在这做一个总结,起码以后不是从零开始了。
分享到:
相关推荐
CAS Server 4.0二次开发说明文档, SSO
sso cas单点登录,服务端(server)原始代码
SSO CAS 整理.
网上 简单的java实现简单的单点登录 的源码 这是链接:http://www.blogjava.net/xcp/archive/2010/04/13/318125.html
本课程主要通过CAS来实现SSO,本教程会从最基本的基础知识讲起,由浅入深再到实战,完成多应用的单点登录功能。 本课程内容如下: 1、 什么是SSO和CAS 2、 CAS Server服务端和客户端的搭建和配置 3、 单点登录和单...
SSO之CAS单点登录详细教程.docx
SSO CAS单点登录配置教程,亲自操作后写的一个配置教程,里面有一个配置好的工程
NULL 博文链接:https://wangchao-17915566.iteye.com/blog/334582
CAS-SSO源码包(两个版本)part1
CAS_SSO单点登录实例详细步骤,CAS_,SSO,单点登录
CAS SSO 原理 (转) SSO 是一个非常大的主题,我对这个主题有着深深的感受,自从广州 UserGroup 的论坛成立以来,无数网友都在尝试使用开源的 CAS , Kerberos 也提供另外一种方式的 SSO ,即基于 Windows 域的 SSO...
SSO之CAS单点登录详细教程+CAS服务端jar+CAS服务端应用+客户端jar
cas sso cas原理 sso原理
MVC SSO 单点登陆完整demo
CAS 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(SSO的一种框架) CAS 包括两部分: CAS Server 和 CAS Client CAS Server:负责完成对用户的认证工作 , ...
sso/cas单点登录Java maven版 含服务端客服端
CAS单点登录,定制CAS单点登录,此文档详细介绍了如何定制CAS,实现单点登录
CAS在Tomcat中实现单点登录项目,单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS...
SSO之CAS单点登录客户端服务端jar包,希望对你们有帮助。
SSO\CAS 单点登录配置手册