java SpringMVC Filter登录拦截器

SpringMVC框架是一个非常强大的java web框架,目前最主流的也是spring mvc的框架今天我们学习下springMVCd的登录拦截器Filter

首先呢,SpringMVC具有统一的入口DIspatcherServlet,所有请求都会通过DIspatcherServlet来进行处理

dispatcherServlet是前置控制器,配置在web.xml中,主要是用来拦截对应的请求,然后将请求根据对应的规则发送到Controller来进行处理

首先在web.xml中进行配置拦截请求


	<!--filter登录拦截器-->
	<filter>    
		<!--拦截请求做处理的类-->
	    <filter-name>SecurityServlet</filter-name>    
	    <filter-class> org.andy.shop.utils.SecurityServlet</filter-class>    
	</filter>    
	<filter-mapping>    
	    <filter-name>SecurityServlet</filter-name>    
	    <url-pattern>*.jsp</url-pattern>    
	</filter-mapping>    
	<filter-mapping>   
	<!--拦截格式.do--> 
	    <filter-name>SecurityServlet</filter-name>    
	    <url-pattern>*.do</url-pattern>    
	</filter-mapping> 



这里我们用的是.do拦截格式,就是说所有请求中有.do的请求都会被我们拦截下来做登录处理,这里如果将.do写成“/”的话,就会拦截所有请求,会导致 js文件、css文件等文件无法访问

这里我们写的是继承HttpServlet类实现Filter接口


package org.andy.shop.utils;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; 

/**
 * Filter 登录拦截器
 * @author lyy
 * @date 2016-05-05
 */
public class SecurityServlet extends HttpServlet implements Filter{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void init(FilterConfig filterConfig) throws ServletException {
	}

	public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request=(HttpServletRequest)srequest;
        HttpServletResponse response  =(HttpServletResponse) sresponse;
        HttpSession session = request.getSession(true);
        String usercode = (String) request.getRemoteUser();// 登录人
        String user_role = (String)session.getAttribute(Constants.USERID);//登录人角色
        String url=request.getRequestURI();//获取的请求路径
        System.out.println(url);
        if(user_role == null || "".equals(user_role)) {//如果登录标识为空
             //判断获取的路径不为空且不是访问登录页面或执行登录操作时跳转
             if(url!=null && !url.equals("") && (url.contains("userDetail.do") )) {//如果请求url不为空且请求的url包含userDetail.do请求
                 response.sendRedirect(request.getContextPath() + "/login.do");
                 return;
             }
         }
        chain.doFilter(srequest, sresponse);//跳转
         return;
	}

}


当我们访问localhost:8080/test/userDetai.do时如果没有登录的验证就会跳转到对应的login页面



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧小农

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值