1、登录相关

1、session登陆验证拦截器

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;


/**
 * session拦截器
 */
@Component
public class SessionInterceptor implements HandlerInterceptor {

    /**
     * 在进入Handler方法执行之前执行本方法
     *
     * @return true:执行下一个拦截器,直到所有拦截器都执行完,再执行被拦截的Controller
     *         false:从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getSession().getAttribute(SessionKeyConstant.USER_INFO) != null) {
            return true;
        }
        // 针对ajax请求处理
        if (request.getHeader("x-requested-with") != null) {
            String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
            response.setHeader("url", basePath + "/login/sessionTimeout");
        } else {
            // 如果超时,重定向到登录页面
            request.getRequestDispatcher("/login/sessionTimeout").forward(request, response);
        }
        return false;
    }

    /**
     * 在进入Handler方法之后,返回ModelAndView之前执行
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub

    }

    /**
     * 在Handler方法执行完之后执行
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub

    }

}

2、记住密码,n天免登录
本项目中用cookie保存密码
(1)jsp 一段java代码,找到本地存放的cookie内容,设置到页面上
(2)后台存放到cookie,失效时间3天

<%@ include file="basic.jsp" %>
<%@page pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <meta charset="utf-8" />
    
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <meta name="apple-mobile-web-app-capable" content="yes" />    
    
    <link href="<%=basePath %>css/bootstrap.min.css" rel="stylesheet" />
    <link href="<%=basePath %>css/bootstrap-responsive.min.css" rel="stylesheet" />
    
    
    <link href="<%=basePath %>css/font-awesome.css" rel="stylesheet" />
    
    <link href="<%=basePath %>css/adminia.css" rel="stylesheet" /> 
    <link href="<%=basePath %>css/adminia-responsive.css" rel="stylesheet" /> 
    
    <link href="<%=basePath %>css/pages/login.css" rel="stylesheet" /> 

    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
    <%
        String name = "";
        String password = "";
        //获取当前站点的所有Cookie
        Cookie[] cookies = request.getCookies();
        if(cookies != null && cookies.length != 0) {
            //对cookies中的数据进行遍历,找到用户名、密码的数据
            for (int i = 0; i < cookies.length; i++) {
                if ("name".equals(cookies[i].getName())) {
                    name = cookies[i].getValue();
                } else if ("password".equals(cookies[i].getName())) {
                    password = cookies[i].getValue();
                }
            }
        }
    %>

    <style type="text/css">
        .error{
            color:red;
        }
        
    </style>
<body>
    
<div class="navbar navbar-fixed-top" style="background: #1186CB;">
        <div class="container" style="width: 97%;">
            <a class="brand" href="./">需求管理平台</a>
            
            <div class="nav-collapse">
                <ul class="nav pull-right">
                    <li class="">
                    </li>
                </ul>
            </div> <!-- /nav-collapse -->
            
        </div> <!-- /container -->
        
    
</div> <!-- /navbar -->


<div id="login-container">
    <div id="login-header">
        <h3>登录</h3>
    </div> <!-- /login-header -->
    
    <div id="login-content" class="clearfix">
    
    <form action="<%=basePath%>login/login" method="post" />
        <fieldset>
            <div class="control-group">
                <label class="control-label" for="username">用户名</label>
                <div class="controls">
                    <input type="text" name="name" class="" id="name" value="<%=name%>" required/>
                </div>
            </div>
            <div class="control-group">
                <label class="control-label" for="password">密码</label>
                <div class="controls">
                    <input type="password" name="password" class="" id="password"  value="<%=password%>" required/>
                </div>
            </div>
            
            <div class="control-group">
                <label class="control-label" for="password" style="color: red;">${pageCode.msg }</label>
            </div>
        </fieldset>
                
        <div id="remember-me" class="pull-left">
            <input type="checkbox" name="remeberFlag" id="remember" value="1" />
            <label id="remember-label" for="remember">记住密码</label>
        </div>
        
        <div class="pull-right">
            <button type="submit" class="btn btn-primary btn-large">
                登录
            </button>
        </div>
    </form>
            
        </div> <!-- /login-content -->
        
    
</div> <!-- /login-wrapper -->

<!-- 放在最后,网页会加载快点 -->
<script src="<%=basePath %>js/jquery-1.7.2.min.js"></script>
<script src="<%=basePath %>js/bootstrap.js"></script>
<!-- 引入表单验证框架 jquery-validation -->
<script src="<%=basePath%>jquery-validation/jquery.validate.min.js"></script>
<script src="<%=basePath%>jquery-validation/localization/messages_zh.js"></script>
</body>
</html>

// 登录,记住密码
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(User user, String remeberFlag, Map<String, Object> model, 
        HttpServletResponse response) {
    User userLogin = loginService.login(user);
    if(userLogin != null) {
        logger.info("是否记住密码:" + remeberFlag);
        if("1".equals(remeberFlag)) {
            //创建两个Cookie对象
            Cookie nameCookie = new Cookie("name", user.getName());
            //设置Cookie的有效期为3天   
            nameCookie.setMaxAge(60 * 60 * 24 * 3);
            Cookie pwdCookie = new Cookie("password", user.getPassword());
            pwdCookie.setMaxAge(60 * 60 * 24 * 3);
            response.addCookie(nameCookie);
            response.addCookie(pwdCookie);
        }
        // 查询该用户对应的功能菜单
        List<Function> functionList = loginService.findFunctionByUserId(userLogin.getUserid());
        // 用户信息,对应的菜单存到session
        session.setAttribute(SessionKeyConstant.USER_INFO, userLogin);
        session.setAttribute(userLogin.getUserid() + SessionKeyConstant.USER_FUNCTION, functionList);
        // 跳转到 functionid中的第一条记录
        return "redirect:/" + functionList.get(0).getUrl();
    } else {
        // 停在login页面,提示信息
        model.put(PageCodeEnum.KEY, PageCodeEnum.USERNAMEPASSWORDWRONG);
        return "/login";
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,160评论 11 349
  • 作者:晚晴幽草轩www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饥人谷_Dylan阅读 1,221评论 0 51
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,353评论 1 17
  • 我差一点,就和她一生了 宋蔓蔓在这里住了一周左右就回到她爸爸家里了,期间我们没有说过一句话。 她要走的前一天晚上...
    殇浅离阅读 249评论 0 0
  • 食材:鸭1只,姜,八角,桂皮,草果,白叩,麻椒,香草,枳壳,草扣,小茴,辣椒,甘草 调料:盐,老抽 1)鸭去毛取出...
    蕴含精华阅读 215评论 0 0