栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

手把手教你在SpringMVC中搭建拦截器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

手把手教你在SpringMVC中搭建拦截器

最近做SSM项目,遇到需要使用拦截器的需求,例如用户在未登录时无法进行买票并支付,下面就本人的经验手把手的教大家如何搭建拦截器。
下面我将模拟用户只有登录后才能进入主页的业务场景来进行代码实现。

1.创建Maven空项目并导入依赖

打开IDEA,选择文件,点击新建项目,选择创建Maven原型项目,至于名称,位置以及工作坐标可以执行选择。

创建项目完成后,需要导入pom.xml依赖,具体如下所示。


        
            javax.servlet
            servlet-api
            2.5
        
        
            javax.servlet.jsp
            jsp-api
            2.2
        
        
            javax.servlet
            jstl
            1.2
        

        
        
            org.mybatis
            mybatis
            3.5.2
        
        
            org.mybatis
            mybatis-spring
            2.0.2
        

        
        
            org.springframework
            spring-webmvc
            5.1.9.RELEASE
        
        
            org.springframework
            spring-jdbc
            5.1.9.RELEASE
        
    
2.编写前端界面和导入静态资源

编写界面前,选中该项目右击添加框架支持,选择添加web应用程序,这样就可以保证最新版本4.0。
在web目录下创建登录注册页面loginAndRegister.jsp
具体代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    登录注册
    
    

    


    
登录
注册

${error}

用户名

密码


用户名

邮箱

密码

确认密码


为了适应SpringMVC的视图解析器,所以在WEB-INF目录下创建jsp目录,在jsp目录下创建home.jsp首页页面。
具体如下,主页代码很简单,读者可自行更改。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


欢迎来到首页


不仅如此,由于需要引入jquery和登录页面的css样式。jquery读者可执行去官网下载或者下载在线路径,登录的css样式代码如下所示:

*{
    margin:0;
    padding: 0;
}
body{
    background-color: #f3f3f3;
    
    background-repeat: no-repeat;
}
.control{
    width: 340px;
    background: white;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    border-radius: 5px;
    
}
.item{
    width: 340px;
    height: 60px;
    background: #eeeeee;
    display:flex;
}
.item div{
    width: 170px;
    height: 60px;
    display: inline-block;
    color: black;
    font-size: 18px;
    text-align: center;
    line-height: 60px;
    cursor: pointer;
}
.content{
    width: 100%;
}
.content div{
    margin: 20px 30px;
    display: none;
    text-align: left;
}
p{
    color: #4a4a4a;
    margin-top: 30px;
    margin-bottom: 6px;
    font-size: 15px;
}
.content input[type="text"], .content input[type="password"]{
    width: 100%;
    height: 40px;
    border-radius: 3px;
    border:1px solid #adadad;
    padding: 0 10px;
    box-sizing: border-box;
}
.content input[type="submit"]{
    margin-top: 40px;
    width: 100%;
    height: 40px;
    border-radius: 5px;
    color: white;
    border: 1px solid #adadad;
    background: #00dd60;
    cursor: pointer;
    letter-spacing: 4px;
    margin-bottom: 40px;
}
.content input[type="button"]{
    cursor: pointer;
    font-weight: bold;
    text-align: center;
    color: red;
    margin-left: 20px;
    width: 88px;
    height: 30px;
    border: none;
    background-color: rgba(255, 255, 255, 0.8);
    border-radius: 5px;
}
.active{
    background: white;
}
.item div:hover{
    background: #f6f6f6;
}
3.编写web.xml文件


    
    
        loginAndRegister.jsp
    
    
        SpringMVC
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
        1
    
    
    
        SpringMVC
        /
    
    
        encoding
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            utf-8
        
    
    
        encoding
        /
    

在里面主要配置了DispatcherServlet,中文乱码过滤以及Spring拦截器等等。

4.编写spring-mvc.xml文件



    
    
    
    
    
    
    
        
            
            
        
    
    
    
        
        
    


输入以上代码后,读者可自行配置应用程序上下文。

拦截器配置文件主要是这一部分,即服务器会拦截/user/home请求,com.xing.filter.userfilter是拦截器对应的处理类。

5.编写拦截器处理类

创建一个userFilter拦截器处理类,实现HandlerInterceptor接口并重写preHandle方法即可。

package com.xing.filter;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class userFilter implements HandlerInterceptor {
    //返回前拦截
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if(request.getSession().getAttribute("user")!=null){
            return true;
        }
        //重定向到登录注册页面
        request.getRequestDispatcher("/loginAndRegister.jsp").forward(request,response);
        return false;
    }
}

该代码表示,如果用户登录后,将可以在session中获取到user,返回true,这样服务器就不会拦截,否则就是返回false,重定向到登录界面。

6.编写用户控制类(userController)
package com.xing.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/home")
    public String enterHome(){
        return "home";
    }
    @RequestMapping("/login")
    public String login(HttpServletRequest request){
        //判断账号密码是否匹配
        request.getSession().setAttribute("user","v587");
        return "home";
    }
}

/user/login请求是走登录请求,服务器会给session设置一个值,方便拦截器判断其值是否为空;
/user/home是直接进入首页的请求。

7.结果展示

由于在web.xml中配置了欢迎页,所以项目执行成功就会直接定位到登录注册页面。如果未登录直接请求http://localhost:8080/user/home,将会重定向到登录注册页面。

如果输入用户名和密码并点击登录,将会跳转到home.jsp首页页面,结果如下:

8.错误纠正

如果读者遇到以下问题,不要犹豫,这一定就是构建SpringMVC常见错误。
即用Maven下载的外部库,并未导入项目结构中。如图所示。

解决方法就是:在WEB-INF目录下创建一个lib目录,将所有的库文件导入lib目录即可解决问题,具体如图所示:

如此就可以解决所遇到的问题!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759538.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号