简单登录流程思考学习

在我使用Spring MVC框架编写web的登录的时候,思路有些不清楚,练习和思考后画出了自己的思考图,这篇笔记是我对登陆流程的思考:

想实现:1.对除登录页面外所有的请求配置登陆拦截
2.登录请求通过/login Controller的方法

登录流程逻辑

一. 对请求分类

在图中我把浏览器所有的请求按照是否与登录相关分为了三种

1. 对/login路径的请求
    在网站内的**已登陆用户**可以进入/login来切换账号
    在网站外的**未登录用户**进入/login来登录

2. 对/login.html静态页面的请求
    **已/未登录用户**请求/login.html

3. 对其他的所有资源的请求
    **已/未登录用户**请求网页登录外的资源

二. 对登录拦截器中的配置

按照对请求的分类,在Interceptor的配置文件中对/login和/login.html两个路径区分出来,不对这两个路径进行登陆拦截

    /*web.xml文件中对.html静态文件放行,不过DispatcherServlet*/
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
    /*mvc.xml文件中对/login路径放行*/
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/login"/>
        <bean class="com.gasin.rbac.web.interceptor.LoginInterceptor"/>
    </mvc:interceptor>

三. 对不同请求的处理

  1. LoginController处理/login路径的请求

/login路径的请求可以是已登陆的用户切换账号,或者是未登录用户进入页面登录,它们是不带登录参数的,所以可以把这两个请求通过有无登录参数来区分出来。

 1. 没有登陆参数的,把请求转发到login.html页面去登录
 
 2. 有登陆参数,就是login.html发过来的登录请求,应该验证登陆
    @RequestMapping("login")
    @ResponseBody    
    public JSONResult login( HttpServletResponse response, User user) {
        //1.判断是否为登录请求
        if (user.getName() == null) {
            //2.1对登陆页面的请求
            response.sendRedirect("/static/login.html");
            return null;
        } else {
            //2.2请求登录
            return userService.checkAUserByNameAndPsd(user) ?  new JSONResult(true, "登陸成功")
                    : new JSONResult(false, "登陸失敗");
        }
    }
  1. 处理对/login.html静态页面的请求

    1. 已/未登录用户请求/login.html,在登录拦截器中直接放行

    2. 之前觉得静态页面不可以做回显,学习到可以用Ajax请求回显数据对已登陆的用户进行账号信息回显。在login.html中编写:

    $(function () {
        /*Ajax请求从后台Session中拿登陆信息数据*/
        $.post("/getname", function (result) {
            if (result.success) {
                var a = JSON.parse(result.msg);
                $("#name").val(a.name);
                $("#password").val(a.password);
            }
        });
    });
  1. 登录拦截器中处理对其他的所有资源的请求

    已/未登录用户请求网页登录外的资源,在拦截器preHandle方法中进行登录判断

    已登陆用户放行,未登录用户转发到login.html页面

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        Object userInSession = request.getSession().getAttribute("USER_IN_SESSION");
        if (userInSession != null)
            return true;
        else {
            response.sendRedirect("/login.html");
            return false;
        }
    }

over

by wangyk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值