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实战之用Swing实现通讯录管理系统
Jun 13 Java/Android
Java并发编程之详解CyclicBarrier线程同步
Jun 23 Java/Android
SpringBoot集成Druid连接池连接MySQL8.0.11
Jul 02 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 Java/Android
Java tomcat手动配置servlet详解
Nov 27 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
java后台调用接口及处理跨域问题的解决
Mar 24 Java/Android
SpringCloud项目如何解决log4j2漏洞
Apr 10 Java/Android
springcloud整合seata
May 20 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
SpringBoot深入分析讲解监听器模式下
Jul 15 Java/Android
Java代码规范与质量检测插件SonarLint的使用
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
php生成略缩图代码
2012/07/16 PHP
Laravel 5框架学习之Eloquent 关系
2015/04/09 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
session 加入redis的实现代码
2016/07/15 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
再论Javascript的类继承
2011/03/05 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
python实现的各种排序算法代码
2013/03/04 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
Python对象与引用的介绍
2019/01/24 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
Python 实现一个计时器
2020/07/28 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
办理信用卡工作证明
2014/01/11 职场文书
小学生成长感言
2014/01/30 职场文书
高中数学教学反思
2014/01/30 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
材料员岗位职责范本
2015/04/11 职场文书
利用Python判断你的密码难度等级
2021/06/02 Python