springMVC使用拦截器检查用户登录

简介: 参考文章编写拦截器类package cultivate_web.interceptor;import javax.servlet.http.HttpServletRequest;import javax.

参考文章

  1. 编写拦截器类
package cultivate_web.interceptor;

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

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import lombok.extern.slf4j.Slf4j;

/**
 * 使用拦截器验证是否登录
 * @author caichangqing5
 * @date 2018年8月16日 上午11:05:07
 */
@Slf4j
public class LoginInterceptor implements HandlerInterceptor{

    /**
     * 在所有拦截的方法执行前拦截
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        HttpSession session = request.getSession();
        Object obj = session.getAttribute("loginUser");
        if(obj == null){    //没有登录
            log.debug("cultivate_web.interceptor.LoginInterceptor.preHandle(HttpServletRequest, HttpServletResponse, Object)--------------not login");
            response.sendRedirect("/cultivate-job/");//路径是localhost:8080/cultivate-job/,就是网站的入口路径,会定向到登录页面
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub
        
    }

}

需要注意的是,如果没有登录,重定向的路径写法:

  1. response.sendRedirect("/abc/") ,被拦截路径(localhost:8080/a/b/c/d/../m),可以是任意长度路径.重定向的路径是:localhost:8080/abc/
  2. response.sendRedirect("abc/")或者response.sendRedirect("abc") 被拦截的路径(localhost:8080/../xxx/m),重定向的路径是:localhost:8080/../xxx/abc/,就是在被拦截的路径上重新定向.
  3. response.sendRedirect("/") ,被拦截路径(localhost:8080/a/b/c/d/../m),可以是任意长度路径.重定向的路径是:localhost:8080

  4. 在spring mvc配置文件中添加拦截器配置
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 先匹配所有路径,然后排除不需要检查的路径 -->
            <mvc:mapping path="/**"/>

            <!-- 与登录相关的请求 -->
            <mvc:exclude-mapping path="/*.jsp"/>
            <mvc:exclude-mapping path="/**/login"/><!-- 放行登录请求 -->
            <!-- 网站的登录路径是 "http://localhost:8080/cultivate-job/" 
                路径path="/"表示的路径就是网站入口路径,
                也就是说拦截器只方向两种请求:
                1. 错误页面,直接访问jsp页面,这些页面不在WEB-INF目录下,可以直接访问
                2. 网站入口请求,检查到没有登录,会重定向到网站入口路径,再被定向到登录页面
            -->
            <mvc:exclude-mapping path="/"/>

           <!-- 以下是静态资源 -->
            <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="cultivate_web.interceptor.LoginInterceptor"/>
                
        </mvc:interceptor>
    </mvc:interceptors>

注意:

a) <bean class="cultivate_web.interceptor.LoginInterceptor"/>配置的是上面新建的拦截器类

b) 需要指定放行的请求,参见上面注释

c) 拦截器的相关配置见参考文章

目录
相关文章
|
9月前
|
存储 容器
shiro配置路径为anno,但请求还是拦截下来了
shiro配置路径为anno,但请求还是拦截下来了
219 2
SpringMVC自定义注解验证登陆拦截
这里业务场景需要,所有的请求都需要登录验证。个别通用业务不需要登录拦截。注解方式替代原有的if判断。
SpringMVC自定义注解验证登陆拦截
|
XML 存储 前端开发
struts2中的拦截器Interceptor,拦截器栈,Token口令拦截
struts2中的拦截器Interceptor,拦截器栈,Token口令拦截
119 0
struts2中的拦截器Interceptor,拦截器栈,Token口令拦截
|
前端开发 Java 数据安全/隐私保护
SpringMVC拦截器实现登录权限控制
SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。 依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于 web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个 controller生命周期之内可以多次调用。
|
XML 数据格式
javaweb Filter实现权限拦截
javaweb Filter实现权限拦截
|
Java 数据安全/隐私保护 Spring
动态验签与用户权限拦截(Spring HandlerInterceptor)
动态验签与用户权限拦截(Spring HandlerInterceptor)
动态验签与用户权限拦截(Spring HandlerInterceptor)
SSM项目使用拦截器实现登录验证功能
本文讲解SSM项目使用拦截器实现登录验证功能,希望对大家有所帮助。
163 0
SSM项目使用拦截器实现登录验证功能
|
Java 数据安全/隐私保护 容器
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)下
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)
145 0
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)下
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)上
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)
132 0
Struts2拦截器的简单应用,登录权限拦截器及与过滤器的区别(八)上