为了账号安全,请及时绑定邮箱和手机立即绑定

SSM项目使用拦截器实现登录验证功能

标签:
Java 面试 SSM

SSM项目使用拦截器实现登录验证功能

登录接口实现

图片描述

 public User queryUser(String UserName, String Password,HttpServletRequest request, HttpServletResponse response) {
        User user = userMapper.queryUser(UserName,Password);
        if(!StringUtils.isEmpty(user)){
            //1.获取session
            HttpSession session = request.getSession();
            //2.获取sessionid
            String sessionId = session.getId();
            //3.将sessionid作为key,用户信息user作为value,放入session中
            session.setAttribute(sessionId,user);
            //4.将sessionId存到cookie中,"JSESSIONID"为自定义的key值
            Cookie cookie = new Cookie("JSESSIONID",sessionId);
            //5.设置cookie的有效路径
            cookie.setPath(request.getContextPath());
            //6.将cookie返回给页面
            response.addCookie(cookie);
        }
        return user;
    }

代码思路:

1.用户输入账号密码登录成功后获取用户信息(User)

2.获取session,得到sessionid(注:每一个session对象都有一个sessionid)

3.将sessionid作为key,用户信息(User)作为value,放入session中

4.创建一个Cookie对象,将"JSESSIONID"作为key,sessionId作为value,放入cookie中

5.设置cookie的有效路径,将cookie返回给页面,此时页面就可以收到key为"JSESSIONID",value为sessionId的cookie信息,如下图。

图片描述

拦截器类代码实现

图片描述

public class Filter extends HandlerInterceptorAdapter {
    private static Logger logger = Logger.getLogger(Filter.class);
    /**
     * 进入拦截器后首先进入的方法
     * 返回false则不再继续执行
     * 返回true则继续执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler)throws Exception
    {
        //1.定义sessionid变量
        String sessionid = "";
        //2.获取session对象
        HttpSession session=request.getSession();
        //3.获取页面上所有的cookie
        Cookie[] cookies = request.getCookies();
        //4.循环寻找名称为"JSESSIONID"的cookie
        for(Cookie cookie:cookies){
            if(cookie.getName().equals("JSESSIONID")){
                sessionid = cookie.getValue();
            }
        }
        //5.根据sessionid获取用户信息
        User user = (User) session.getAttribute(sessionid);
        if(StringUtils.isEmpty(user)) {
            logger.info("用户未登录");
            //用户未登录跳转到登录页面
            response.sendRedirect("login");
            return false;
        }
        logger.info("用户已登录");
        return  true;
    }

}

代码思路:

1.自定义一个拦截器类,首先要继承HandlerInterceptorAdapter,并重写preHandle方法,在此方法中编写拦截器的逻辑代码

2.获取cookies数组,这个数组有浏览器中的所有cookies信息,循环遍历找到name为"JSESSIONID"的cookies,并获取到其value值,这个值就是sessionid

3.通过sessionid查找user对象,如果能获取对象证明登录过,如果不能获取到对象证明没有登录过

4.如果登录过就直接访问接口,如果没有登录过就跳转到登录页面进行登录

配置文件实现

图片描述

    <!--自定义拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--配置要拦截的路径-->
            <mvc:mapping path="/**"/>
            <!--配置登录接口不被拦截-->
            <mvc:exclude-mapping path="/user/login"/>
            <!--指定拦截器类路径-->
            <bean class="com.lishiqi.Util.Filter"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

配置含义:

1.我们使用拦截器肯定要规定拦截哪些接口,首先我们将所有的接口都拦截

2.然后我们发现问题,此时登录接口也在拦截范围中,所以我们正常调用登录接口之前他也会拦截判断一下用户是否登录过,这个时候用户肯定没有登录过,那么就会又跳转到登录界面,我们再次登录还是跳转到登录页面,一直登录不上,所以我们需要把登录接口配置为不拦截

3.然后我们指定我们配置好的拦截器类路径,这个时候可以在该类中进行登录验证操作了

4.此配置文件为spring-mvc.xml配置文件

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
8
获赞与收藏
30

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消