Spring MVC拦截器

本文介绍SpringWebMVC中的处理器拦截器功能及其使用方法,包括自定义拦截器的具体实现与配置步骤,并通过示例代码展示如何进行权限拦截及登录验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对网络请求进行预处理和后处理。拦截网络请求,进行逻辑判断时使用。 

使用方法:1、自定义拦截器,2、在spring-mvc中配置拦截器。

自定义拦截器:继承自HandlerInterceptorAdapter

package com.awb.interceptor;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 自定义拦截器处理器
 * 继承自:HandlerInterceptorAdapter
 */
public class LoginInterceptor extends HandlerInterceptorAdapter {
    //需求:判断用户是否登录,如果未登录,跳转到登录页面
    /**
     * Controller执行前调用此方法
     * 返回true表示继续执行,返回false中断执行
     * 主要用于权限拦截,登录校验等
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String requestURI = request.getRequestURI();
        if (!requestURI.contains("/login")){
            //判断当前用户是否登录
            String  userName = (String) request.getSession().getAttribute("userName");
            //如果未登录,跳转到登录页面
            if (null==userName){
                //重定向,进行网络请求
                response.sendRedirect(request.getContextPath()+"/login/goLogin");
                //拦截当前请求
                return false;
            }
        }
        //如果是调用登录接口,就直接跳转到对LoginController
        return true;
    }
}

2、在spring-mvc中配置拦截器

    <!--配置拦截器,拦截网络请求-->
    <mvc:interceptors>
        <!--定义一个拦截器-->
        <mvc:interceptor>
            <!--定义拦截规则,拦截所有的网络请求-->
            <mvc:mapping path="/**"/>
            <!--当前请求不进行拦截-->
            <mvc:exclude-mapping path="/deposits/*"/>
            <!--自定义的拦截器类,用于进行逻辑判断-->
            <!--拦截到url后交给LoginInterceptor拦截器进行处理判断-->
            <bean class="com.awb.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

LoginController:

package com.awb.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpSession;


@Controller
@RequestMapping(value = "/login")
public class LoginController {

    /**
     * 跳转到登录页面
     * @return
     */
    @RequestMapping(value = "/goLogin")
    public String goLogin(){
        //跳转到登录页面
        return "login";
    }

    /**
     * 登录操作
     * @return
     */
    @RequestMapping(value = "/doLogin",method = RequestMethod.GET)
    public String doLogin(String name, HttpSession httpSession){
        //httpSession域中存储用户登录信息
        httpSession.setAttribute("userName",name);
        return "redirect:/home/index.do";
    }
}


需要自定义拦截器类,拦截器类中有三个方法:方法前,方法后,页面渲染后。比如用户没有登录不放行,不让请求进入controller层。

最好值配置一个拦截器,两个拦截器的话,逻辑关系不好处理。

 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值