动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

Spring MVC实现用户登录权限验证

08-20 17:28 43浏览
举报 T字号
  • 大字
  • 中字
  • 小字

尽管Spring MVC实现用户登录权限验证使用过滤器(filter拦截器(interceptor都可以实现,但似乎更多的开发者选择使用interceptor。这是因为拦截器不依赖与servlet容器,过滤器依赖与servlet容器。而且拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

下面我们就使用Interceptor实现用户登录权限验证功能。

拦截器需要实现Inceptor拦截器接口的三个方法。

1.preHandle方法

顾名思义,该方法将在请求处理之前进行调用。Spring MVC中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。每个Interceptor 的调用会依据它的声明顺序依次执行,而且最先执行的都是Interceptor 中的preHandle 方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean类型的,当它返回为false 时,表示请求结束,后续的Interceptor 和Controller 都不会再执行;当返回值为true 时就会继续调用下一个Interceptor 的preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller 方法。

2.postHandle方法

preHandle 方法的解释我们知道这个方法包括后面要说到的afterCompletion 方法都只能是在当前所属的Interceptor 的preHandle 方法的返回值为true 时才能被调用。postHandle 方法,顾名思义就是在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行。

3.afterCompletion方法

该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。

下面实现自己的拦截器的部分代码:

package com.huitong.util;

 

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class StudentAuth implements HandlerInterceptor {

      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        HttpSession session = request.getSession();

        Object stu = session.getAttribute("student");

        if( stu == null ){

            response.sendRedirect("/webapp1/index.jsp");

            return false;

        }

 

        return true;

    }

 

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

 

    }

 

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

 

    }

}

最后需要在spring-mvc.xml配置文件中进行拦截器配置,下面是配置片段

<mvc:interceptors>
        <mvc:interceptor>
            <!-- 先匹配所有路径,然后排除不需要检查的路径 -->
            <mvc:mapping path="/**"/>

            <!-- 与登录相关的请求 -->
            <mvc:exclude-mapping path="/*.jsp"/>
            <mvc:exclude-mapping path="/student/login.action"/>
            <mvc:exclude-mapping path="/student/register.action"/>

            <!-- 以下是静态资源 -->
            <mvc:exclude-mapping path="/images/**" />
            <mvc:exclude-mapping path="/css/**" />
            <mvc:exclude-mapping path="/font/**" />
            <mvc:exclude-mapping path="/js/**" />
            <mvc:exclude-mapping path="/datepicker/**" />

            <!-- 用户是否已经登录的检查bean -->
            <bean class="com.huitong.util.StudentAuth"/>
                
        </mvc:interceptor>
    </mvc:interceptors>

最后可以测试使用了

Spring MVC框架作为Spring内置的Spring web框架,实现用户登录权限验证是前端开发的拨必不可少的一步。对Spring MVC框架有学习兴趣的小伙伴可以观看本站的Spring MVC视频教程,学习后续的Spring MVC知识。

0人推荐
共同学习,写下你的评论
0条评论
携代码的男孩纸
程序员携代码的男孩纸

24篇文章贡献108038字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消