zoukankan      html  css  js  c++  java
  • springMVC使用拦截器检查用户登录

    参考文章

    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) 拦截器的相关配置见参考文章

  • 相关阅读:
    c# 解决读取Excel混合文本类型,数据读取失败的解决方法
    c#中的常用ToString()方法总结
    vsts
    RSA加密解密
    odbc连接数据库
    SerialPort
    C# Winform下载文件并显示进度条
    c# 面试题
    SQL Server 存储过程
    mysql 事务处理
  • 原文地址:https://www.cnblogs.com/donfaquir/p/9486418.html
Copyright © 2011-2022 走看看