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

简介: 本文讲解SSM项目使用拦截器实现登录验证功能,希望对大家有所帮助。

登录接口实现



1.png


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


2.png


拦截器类代码实现



3.png


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


配置文件实现



4.png


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



相关文章
|
5月前
|
Java 编译器 Maven
使用intellij idea搭建SSM架构的maven项目 详细
使用intellij idea搭建SSM架构的maven项目 详细
98 4
|
5月前
|
搜索推荐 JavaScript Java
计算机Java项目|基于SSM的个性化商铺系统
计算机Java项目|基于SSM的个性化商铺系统
|
2月前
|
Java 应用服务中间件 数据库连接
ssm项目整合,简单的用户管理系统
文章介绍了一个使用SSM框架(Spring、SpringMVC、MyBatis)构建的简单用户管理系统的整合过程,包括项目搭建、数据库配置、各层代码实现以及视图展示。
ssm项目整合,简单的用户管理系统
|
5月前
|
前端开发 JavaScript Java
计算机Java项目|SSM智能仓储系统
计算机Java项目|SSM智能仓储系统
|
1月前
|
前端开发 Java Spring
SSM:拦截器&model&文件的上传和下载
本文档介绍了Spring MVC中拦截器的实现、Model对象的使用、文件上传下载的配置及实现,以及项目依赖管理文件pom.xml的配置。拦截器通过继承HandlerInterceptor接口实现请求的预处理、后处理和清理工作。Model对象用于数据传递,支持视图解析器的直接返回。文件上传下载涉及配置multipartResolver及编写控制器方法处理文件操作。pom.xml列出了项目所需的各种依赖库。
|
1月前
|
前端开发 Java 关系型数据库
【保姆级SSM教程】高并发朋友圈点赞项目设计
【保姆级SSM教程】高并发朋友圈点赞项目设计
35 0
|
1月前
|
SQL Java 数据库连接
快速搭建SSM项目【最全教程】~令狐小哥版
快速搭建SSM项目【最全教程】~令狐小哥版
32 0
|
3月前
|
Java 数据库连接 Maven
SSM框架整合图书管理项目
这篇文章是关于SSM框架整合到图书管理项目的详细教程,涵盖了从Maven项目构建、依赖导入、数据库连接、配置文件编写、实体类和接口实现到SpringMVC整合的完整步骤。
SSM框架整合图书管理项目
|
3月前
|
Java 应用服务中间件 Maven
Mac使用Idea配置传统SSM项目(非maven项目)
Mac使用Idea配置传统SSM项目(非maven项目)
57 1
WXM
|
4月前
|
Java 应用服务中间件 网络安全
Eclipse运行SSM/SSH项目教程
Eclipse运行SSM/SSH项目教程
WXM
147 0