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


Posted in Java/Android onJanuary 22, 2022

登录接口实现

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信息,如下图。

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

拦截器类代码实现

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

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.如果登录过就直接访问接口,如果没有登录过就跳转到登录页面进行登录

配置文件实现

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

<!--自定义拦截器-->
    <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配置文件

到此这篇关于SSM项目使用拦截器实现登录验证功能的文章就介绍到这了,更多相关SSM 拦截器登录验证内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
Java Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
java Nio使用NioSocket客户端与服务端交互实现方式
Jun 15 Java/Android
SpringBoot工程下使用OpenFeign的坑及解决
Jul 02 Java/Android
使用springMVC所需要的pom配置
Sep 15 Java/Android
spring cloud 配置中心native配置方式
Sep 25 Java/Android
JPA 通过Specification如何实现复杂查询
Nov 23 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
Apr 08 Java/Android
零基础学java之带返回值的方法的定义和调用
Apr 10 Java/Android
Java由浅入深通关抽象类与接口(下篇)
Apr 26 Java/Android
Spring Data JPA框架持久化存储数据到数据库
Apr 28 Java/Android
Java 定时任务技术趋势简介
May 04 Java/Android
Spring boot admin 服务监控利器详解
Aug 05 Java/Android
利用Sharding-Jdbc进行分库分表的操作代码
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 #Java/Android
JavaCV实现照片马赛克效果
Jan 22 #Java/Android
maven依赖的version声明控制方式
深入浅出讲解Java8函数式编程
Jan 18 #Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 #Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
You might like
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
php学习 字符串课件
2008/06/15 PHP
php获取百度收录、百度热词及百度快照的方法
2015/04/02 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
写的htc的数据表格
2007/01/20 Javascript
javascript网页关键字高亮代码
2008/07/30 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
常用python编程模板汇总
2016/02/12 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Python自动发邮件脚本
2017/03/31 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
思想品德自我评价
2014/02/04 职场文书
体育比赛口号
2014/06/09 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang