知识在于总结,两个月前做的东西,现在就感觉有点模糊,更别提以后了,所以定期的总结是很必要的。
前段时间项目上了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功能基本实现了,给我的感觉是分得太细了,有点繁琐,大家不怎么用它,所以相关资料也比较少。虽然上面罗列的代码比较简单,但是在这做一个总结,起码以后不是从零开始了。
分享到:
相关推荐
### SSO CAS Server 二次开发说明文档 #### 环境搭建 为了便于进行二次开发,推荐使用Maven overlays特性来构建开发环境。这样可以利用最新版本的资源文件覆盖现有WAR包中的文件,无需手动导入整个`cas-server-...
CAS(Central Authentication Service)是 Yale 大学开源的一个SSO协议,广泛应用于企业级应用环境中。本源码集合为一个简单的Java实现的SSO CAS单点登录示例,适合初学者理解和实践SSO原理。 首先,我们需要理解...
CAS(Central Authentication Service)是耶鲁大学开发的一个开源SSO项目,它为各种应用提供了一个统一的认证入口。在本压缩包中,我们拥有SSO CAS服务器的原始代码,这为我们提供了深入了解和定制SSO解决方案的机会...
本课程主要通过CAS来实现SSO,本教程会从最基本的基础知识讲起,由浅入深再到实战,完成多应用的单点登录功能。 本课程内容如下: 1、 什么是SSO和CAS 2、 CAS Server服务端和客户端的搭建和配置 3、 单点登录和单...
SSO之CAS单点登录详细教程.docx
CAS (Central Authentication Service) 是一个开源的SSO框架,广泛应用于教育和企业环境中。这篇整理主要围绕着如何搭建和配置CAS 5.x版本进行,下面将对涉及的知识点进行详细讲解。 1. **CAS 5.x 搭建基础**: ...
CAS(Central Authentication Service)是基于Java的开源身份验证框架,主要用于实现单一登录(Single Sign-On, SSO)。SSO允许用户在一次登录后访问多个应用系统,而无需为每个系统分别进行认证,大大提升了用户...
CAS(Central Authentication Service)是耶鲁大学开源的SSO解决方案,它提供了一种集中式的身份验证服务,简化了用户管理和安全认证流程。 本教程将详细介绍如何配置CAS以实现SSO。首先,我们需要理解CAS的基本...
NULL 博文链接:https://wangchao-17915566.iteye.com/blog/334582
CAS(Central Authentication Service)是由Yale大学发起的开源项目,它是实现SSO的一种常见解决方案,尤其在Java项目中广泛应用。据称,大约80%的开源Web SSO项目选择了CAS。CAS的设计理念是简单高效且安全,其核心...
**CAS单点登录系统详解** CAS(Central Authentication Service,中央认证服务)...`定制CAS登录验证.pdf`文档很可能是对这一过程的详细指南,对于想要深入了解和实践CAS SSO的IT专业人员来说,是一份宝贵的参考资料。
CAS是耶鲁大学开源的一个SSO解决方案,它为Web应用程序提供了一个集中式的认证服务。以下是本教程涉及的主要知识点: 1. **CAS架构**:CAS由三个主要组件组成:CAS服务器、CAS客户端和用户浏览器。用户首先向CAS...
【SSO、CAS与Shiro:理解与应用】 在当今的Web开发中,单点登录(Single Sign-On,简称SSO)已经成为企业级系统中不可或缺的一部分。SSO允许用户通过一次登录,就能访问多个相互独立的应用系统,极大地提高了用户...
在Web应用程序中,MVC(Model-View-Controller)架构常被用来构建SSO系统,因为它提供了良好的结构和可扩展性。`SmartSSO-master`这个压缩包文件很可能包含了一个基于MVC模式实现的SSO解决方案的完整示例。 在SSO...
在这个场景下,`CAS_LDAP.rar` 文件集合提供了一个关于如何将CAS与OpenLDAP集成以实现SSO和SOA的实践指南。 **CAS (Central Authentication Service)** CAS 是一个开源的、基于Web的单一登录协议服务器,它允许...
CAS(Central Authentication Service)是SSO的一种实现,由耶鲁大学开发并开源,它提供了一个中心化的认证服务器和一系列协议来实现SSO。本项目是一个基于Java Maven构建的SSO解决方案,包括服务端和客户端两部分。...
标题中的"CAS-SSO-TRIAL.zip"指的是一个关于CAS(Central Authentication Service)单一登录(Single Sign-On, SSO)的试验性压缩文件。这个压缩包包含了与SSO相关的资源,特别是用Java和.NET两种技术实现的示例。...
在"SSO之CAS单点登录客户端服务端jar包"中,包含的是实现CAS单点登录功能所需的客户端和服务端组件。这些jar包包含了以下关键知识点: 1. **CAS服务器**:这是整个SSO架构的核心,负责处理用户的登录请求,验证凭证...
CAS(Central Authentication Service,中央认证服务)是Java社区开发的一个开源SSO解决方案,它为Web应用提供了统一的认证和授权服务。 CAS的核心概念包括以下几个部分: 1. **CAS服务器**:这是SSO的核心,负责...