CookieTool (Cookie帮助类):

package com.utcsoft.common.cookie;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class CookieTool { /**
* 设置cookie(接口方法)
* @author 刘鹏
* @param response
* @param name cookie名字
* @param value cookie值
* @param maxAge cookie生命周期 以秒为单位
*/
public static void addCookie(HttpServletResponse response,String name,String value,int maxAge){
Cookie cookie = new Cookie(name,value);
cookie.setPath("/");
if(maxAge>){
cookie.setMaxAge(maxAge);
}
response.addCookie(cookie);
} /**
* 根据名字获取cookie(接口方法)
* @author 刘鹏
* @param request
* @param name cookie名字
* @return
*/
public static Cookie getCookieByName(HttpServletRequest request,String name){
Map<String,Cookie> cookieMap = ReadCookieMap(request);
if(cookieMap.containsKey(name)){
Cookie cookie = (Cookie)cookieMap.get(name);
return cookie;
}else{
return null;
}
} /**
* 将cookie封装到Map里面(非接口方法)
* @author 刘鹏
* @param request
* @return
*/
private static Map<String,Cookie> ReadCookieMap(HttpServletRequest request){
Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
Cookie[] cookies = request.getCookies();
if(null!=cookies){
for(Cookie cookie : cookies){
cookieMap.put(cookie.getName(), cookie);
}
}
return cookieMap;
} }
AuthorizedInterceptor (拦截器): package com.utcsoft.common.interceptor;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.utcsoft.common.cookie.CookieTool;
import com.utcsoft.pcapps.selfservice.dao.UtcUsersDao;
import com.utcsoft.pcapps.selfservice.entity.UtcUsers; public class AuthorizedInterceptor implements HandlerInterceptor { /**
* 该方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。该方法将在整个请求完成之后,也就是DispatcherServlet渲染了视图执行,
* 这个方法的主要作用是用于清理资源的,当然这个方法也只能在当前这个Interceptor的preHandle方法的返回值为true时才会执行。
*/
public void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
} /**
* 这个方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。postHandle是进行处理器拦截用的,它的执行时间是在处理器进行处理之
* 后,也就是在Controller的方法调用之后执行,但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中你可以对ModelAndView进行操
* 作。这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的Interceptor拦截器该方法反而会后调用,这跟Struts2里面的拦截器的执行过程有点像,
* 只是Struts2里面的intercept方法中要手动的调用ActionInvocation的invoke方法,Struts2中调用ActionInvocation的invoke方法就是调用下一个Interceptor
* 或者是调用action,然后要在Interceptor之前调用的内容都写在调用invoke之前,要在Interceptor之后调用的内容都写在调用invoke方法之后。
*/
public void postHandle(HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception {
} /**
* preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用,SpringMVC中的Interceptor拦截器是链式的,可以同时存在
* 多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在
* Controller方法调用之前调用。SpringMVC的这种Interceptor链式结构也是可以进行中断的,这种中断方式是令preHandle的返
* 回值为false,当preHandle的返回值为false的时候整个请求就结束了。
*/
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
String uri = request.getRequestURI();
//登陆请求不拦截
if(uri.indexOf("checkUser.do") != -){
return true;
} //设置不拦截的对象
String[] noFilters = new String[] {"logOn","index"}; //对登录本身的页面以及业务不拦截
boolean beFilter = true;
for (String s : noFilters) {
if (uri.indexOf(s) != -) {
beFilter = false;
break;
}
} if (beFilter==true) {//除了不拦截的对象以外
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; UtcUsers u = (UtcUsers)request.getSession().getAttribute("utcUsers");
if (u==null) {//未登录
response.sendRedirect(basePath + "self/logOn.do");
return false;
}else {//已经登录,判断他是否登录前勾选了记住密码
Cookie cokLoginName = CookieTool.getCookieByName(request, "loginName");
Cookie cokLoginPwd = CookieTool.getCookieByName(request, "loginPwd");
if (cokLoginName != null && cokLoginPwd != null && cokLoginName.getValue() != null && cokLoginPwd.getValue() != null) {
String loginName = cokLoginName.getValue();
String loginPwd = cokLoginPwd.getValue();
// 检查到客户端保存了用户的密码,进行该账户的验证
UtcUsersDao usersDao = new UtcUsersDao();
UtcUsers users = usersDao.findByNameAndPwd(loginName, loginPwd);
if (users == null) {
CookieTool.addCookie(response, "loginName", null, ); // 清除Cookie
CookieTool.addCookie(response, "loginPwd", null, ); // 清除Cookie
try {
response.sendRedirect(basePath + "self/logOn.do");
return false;
} catch (IOException e) {
e.printStackTrace();
}
request.getSession().setAttribute("errorInfo", "请登录!");
}
/*
// 如果账户验证成功,则跳转到点击的页面
else if ("10".equals(users.getUserrole())) {
request.getSession().setAttribute("utcUsers", users);
str = "/WEB-INF/jsp/Administrator.jsp";
response.sendRedirect(str);
} else {
// 将UtcUsers放到session中
request.getSession().setAttribute("utcUsers", users);
str = "/WEB-INF/jsp/self/index.jsp";
response.sendRedirect(str);
}
*/
}
} }
return true;
} }

登录验证的方法:

/**
* 描述:登录验证
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value="/index")
public String index(HttpServletRequest httpRequest,HttpServletResponse httpResponse) throws IOException{
String user_name = httpRequest.getParameter("user_name");
String user_pwd = httpRequest.getParameter("user_pwd");
String str = null;
UtcUsersDao usersDao = new UtcUsersDao();
UtcUsers users = usersDao.findByNameAndPwd(user_name,user_pwd);
if(users==null){//登录验证失败
logger.info("登录失败");
httpRequest.getSession().setAttribute("errorInfo","用户名或密码错误,请重新登录!");
String path = httpRequest.getContextPath();
String basePath = httpRequest.getScheme() + "://"+ httpRequest.getServerName() + ":" + httpRequest.getServerPort()+ path + "/";
httpResponse.sendRedirect(basePath+"self/logOn.do");
}else if ("".equals(users.getUserrole())) {
int loginMaxAge = ***; //定义账户密码的生命周期,这里是一个月。单位为秒
String rememberPwd = httpRequest.getParameter("rememberPwd")==null?"":httpRequest.getParameter("rememberPwd").toString();
if ("rememberPwd".equals(rememberPwd)) {
CookieTool.addCookie(httpResponse , "loginName" , user_name , loginMaxAge); //将姓名加入到cookie中
CookieTool.addCookie(httpResponse , "loginPwd" , user_pwd , loginMaxAge); //将密码加入到cookie中
}
httpRequest.getSession().setAttribute("utcUsers", users);
str = "/Administrator";
}else {
int loginMaxAge = ***; //定义账户密码的生命周期,这里是一个月。单位为秒
String rememberPwd = httpRequest.getParameter("rememberPwd")==null?"":httpRequest.getParameter("rememberPwd").toString();
if ("rememberPwd".equals(rememberPwd)) {
CookieTool.addCookie(httpResponse , "loginName" , user_name , loginMaxAge); //将姓名加入到cookie中
CookieTool.addCookie(httpResponse , "loginPwd" , user_pwd , loginMaxAge); //将密码加入到cookie中
}
//将UtcUsers放到session中
httpRequest.getSession().setAttribute("utcUsers", users);
str = "self/index";
}
return str;
}

SpringMVC记住密码功能的更多相关文章

  1. java实现记住密码功能(利用cookie)

    <br> <input type="text" id="userName" name="userName" value=& ...

  2. 通过sharedpreferences实现记住密码功能

    通过sharedpreferences实现记住密码功能

  3. jquery.cookie.js 操作cookie实现记住密码功能的实现代码

    jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下.   复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready( ...

  4. cookie记住密码功能

    很多门户网站都提供了记住密码功能,虽然现在的浏览器都已经提供了相应的记住密码功能 效果就是你每次进入登录页面后就不需要再进行用户名和密码的输入: 记住密码功能基本都是使用cookie来进行实现的,因此 ...

  5. 【原创】js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: HttpServletRequest request HttpServletResponse res ...

  6. android: SharedPreferences实现记住密码功能

    既然是实现记住密码的功能,那么我们就不需要从头去写了,因为在上一章中的最佳实 践部分已经编写过一个登录界面了,有可以重用的代码为什么不用呢?那就首先打开 BroadcastBestPractice 项 ...

  7. vue项目实现记住密码功能

     一.谷歌浏览的残留问题 现在很多的网站都有一个需求是记住密码这个功能,为的是避免用户下次登录的时候繁琐的输入过程. 像是一些主流的浏览器(比如Chrome)都有了这个功能,而且如果你登录了Chrom ...

  8. js中记住密码功能

    js中记住密码功能(在前端实现) 直接上例子(如果你也要实现的话注意改一些变量名称,jsp代码不包含样式) Jsp代码: <form class="am-form tpl-form-l ...

  9. js中利用cookie实现记住密码功能

    在登录界面添加记住密码功能,代码如下: //设置cookie var passKey = '4c05c54d952b11e691d76c0b843ea7f9'; function setCookie( ...

随机推荐

  1. @Autowired与@Resource的差别

    1.@Autowired与@Resource都能够用来装配bean. 都能够写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必 ...

  2. 【JQuery】Could not find action or result No result defined for action

    ajax调用时,返回值错误了.一般返回null即可.

  3. Android 中 ListView Adapter getView 被多次调用问题 解决方法

    执行多次原因是因为每显示一个VIew,它都去测量view的高度,执行measure方法,导致getView执行多次. 解决方法是将 ListView 的 layout_width 设置为 fill_p ...

  4. 【 D3.js 入门系列 — 3 】 做一个简单的图表!

    图1. 柱形图 1. 柱形图 前几章的例子,都是对文字进行处理.本章中将用 D3 做一个简单的柱形图.制作柱形图有很多种方法,比如用 HTML 的 <div> 标签,或在 SVG 上绘制 ...

  5. 我的Python成长之路---第三天---Python基础(13)---2016年1月16日(雾霾)

    五.Python的常用的内置函数 Python为我们准备了大量的内置函数,如下图所示 这里我们只讨论红框内的内置函数 abs(x) 返回一个数的绝对值(模),参数可以是真说或浮点数 >>& ...

  6. 转Android APP安装后不在桌面显示图标的应用场景举例和实现方法

    转http://www.cnblogs.com/allenzheng/p/4510725.html#3186608 Android APP安装后不在桌面显示图标的应用场景举例和实现方法 最近在为公司做 ...

  7. Linux c c++ 开发调试技巧

    看到一篇介绍 linux c/c++ 开发调试技巧的文章,感觉挺使用,哪来和大家分享. 通向 UNIX 天堂的 10 个阶梯Author: Arpan Sen, 高级技术人员, Systems Doc ...

  8. node.js 解析xml BOM问题(xmlreader sax.js)

    Email:longsu2010 at yeah dot net 之前写了两篇文章关于node.js解析xml,说的是xmlreader,文章如下 node.js解析xml(xmlreader) no ...

  9. python 3.4 装matplotlib numpy

    为了装个matplotlib包,搞了好久:   python3.4,官方没有对应版本的包,只能去下面这个地方下对应的版本: http://www.lfd.uci.edu/~gohlke/pythonl ...

  10. Java基础:多态(重载和重写)

    转载请注明出处:jiq•钦's technical Blog (1)域与静态方法 记住"仅仅有普通方法的调用是多态的". 而域和静态方法不是:对于域的訪问.在编译期间就已经进行解析 ...