SpringMVC过滤器

SpringMVC的过滤和Struts2的过滤差不多

1.编写过滤器类(继承OncePerRequestFilter这个类,实现

doFilterInternal这个抽象方法
)  strtus2通常是实现filter接口

SessionFilter:过滤掉非法请求(用户未登录)

package com.filter;

import java.io.IOException;

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

import org.springframework.web.filter.OncePerRequestFilter;

public class SessionFilter extends OncePerRequestFilter{
	
	/**
	 * 当用户session过期,禁止用户访问特殊页面
	 */
	@Override
	protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain chain)
			throws ServletException, IOException {
		//检测session是否有该用户
		if(request.getSession().getAttribute("user")==null){//未登录
			//定义游客请求接口:格式       a.do,b.do,c.do
			String sb="home,regist,login,existsuser,jobdetail";
			//访问游客页面,自动重定向到主页
			String uri=request.getRequestURI();
			String action=uri.substring(uri.lastIndexOf("/")+1,uri.lastIndexOf("."));
			if(!sb.contains(action)){//请求了非法请求
				response.sendRedirect("/SSM/user/home.do");
			}
		}
		//登录的用户直接通过
		chain.doFilter(request, response);
	}
}
//JSPFilter:过滤掉所有jsp页面访问(tip:严格来说是这样的,所有的请求都应该经过服务器,不应该让用户直接访问jsp资源,这属于更严格的MVC思想)
package com.filter;

import java.io.IOException;

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

import org.springframework.web.filter.OncePerRequestFilter;

public class JSPFilter extends OncePerRequestFilter{

	@Override
	protected void doFilterInternal(HttpServletRequest request,
			HttpServletResponse response, FilterChain chain)
			throws ServletException, IOException {
		//这里没有做太严格的过滤,直接重定向主页就行了
		response.sendRedirect("/SSM/user/home.do");
	}

}

2.web.xml配置过滤器

 <!-- 解决.jsp请求过滤器 -->
 	 <filter>
 	 	<filter-name>JSPFilter</filter-name>
 	 	<filter-class>com.filter.JSPFilter</filter-class>
 	 </filter>
 	 <filter-mapping>
 	 	<filter-name>JSPFilter</filter-name>
 	 	<url-pattern>*.jsp</url-pattern>
 	 </filter-mapping>
 	 <!-- 解决非法请求过滤器 -->
 	 <filter>
 	 	<filter-name>SessionFilter</filter-name>
 	 	<filter-class>com.filter.SessionFilter</filter-class>
 	 </filter>
 	 <filter-mapping>
 	 	<filter-name>SessionFilter</filter-name>
 	 	<url-pattern>*.do</url-pattern>
 	 </filter-mapping>

结果:当用户session过期访问页面,会自动跳转到主页,就不会出现后台空指正错误的问题。

    当用户试图直接访问.jsp文件的时候,后台直接重定向到主页。(没有太严格的控制这个逻辑,这里可以按照自己的思想去code)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVC中的过滤器(Filter)是一种拦截器,用于在请求被分派到处理程序之前或响应被发送到客户端之前对请求和响应进行预处理和后处理。它可以用于实现一些通用的功能,例如日志记录、安全性、性能监控等。 在SpringMVC中,过滤器的实现方式与Servlet中的过滤器类似。SpringMVC过滤器实现类必须实现javax.servlet.Filter接口,并且需要在web.xml文件中进行配置。例如: ``` <filter> <filter-name>myFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping> ``` 上面的配置定义了一个名为myFilter的过滤器,并将其映射到所有请求路径上。在实现MyFilter类时,可以在doFilter()方法中实现自定义的过滤器逻辑。 过滤器的执行顺序与在web.xml文件中定义的顺序有关,先定义的过滤器先执行。另外,SpringMVC还提供了一种更便捷的方式来配置过滤器,即使用注解@Order来指定过滤器的执行顺序。例如: ``` @Component @Order(1) public class MyFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 过滤器逻辑 } } ``` 上面的配置定义了一个名为MyFilter的过滤器,并使用@Order(1)指定了它的执行顺序。可以通过更改@Order的值来改变过滤器的执行顺序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值