`
Franciswmf
  • 浏览: 800406 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

javax.servlet.Filter过滤器实现SpringMvc拦截器Interceptor的效果

 
阅读更多
1、配置Filter
<!-- AuthFilter -->
    <filter>
	    <filter-name>authFilter</filter-name>
	    <filter-class>com.crm.filter.AuthFilter</filter-class>
	    <init-param>
	    	<param-name>encoding</param-name>
	    	<param-value>utf-8</param-value>
	    </init-param>
    </filter>
    <filter-mapping>
	    <filter-name>authFilter</filter-name>
	    <url-pattern>/crm/*</url-pattern>
    </filter-mapping>



2、Filter类

import java.io.IOException;
import java.io.PrintWriter;

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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.alibaba.fastjson.JSONObject;

/**
 * 权限校验过滤器
 */
public class AuthFilter implements Filter{
	private static final Logger logger = LoggerFactory.getLogger(AuthFilter.class);
    private CrmService crmService;
	private static String encoding;//不能用final修饰
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		String logStr="AuthFilter.init...";
		encoding=filterConfig.getInitParameter("encoding");
		logger.info(logStr+"初始化encoding="+encoding);
		//Filter中不能直接获取spring中的service
//用注解的方式无法注入crmService,打印日志如下:“AuthFilter.doFilter...过滤处理, commonService=null”
		ApplicationContext context=WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext());
		crmService=(CrmService) context.getBean("crmService");
	}
	
	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		String logStr="AuthFilter.doFilter...";
		logger.info(logStr+"过滤处理");
		HttpServletRequest request=(HttpServletRequest) servletRequest;
		HttpServletResponse response=(HttpServletResponse) servletResponse;
		request.setCharacterEncoding(encoding);
		//
		PrintWriter out=null;
		try{
	    	UserInfo userInfo=crmService.validateMethod(request);
	    	logger.info(logStr+String.format("过滤校验通过:token=%s, servletPath=%s, uri=%s, url=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),request.getServletPath(),request.getRequestURI(),request.getRequestURL()));//serveletPath拿不到
	    	request.setAttribute("CRM_REQUEST_USERINFO_DEMO", userInfo);
	    	filterChain.doFilter(request, response);
		}catch(DemoValidateException e){
    		//公共校验异常
    		logger.error(logStr+"接口公共校验异常");
    		BaseResponse rsp=new BaseResponse();
    		rsp.setErrCode(e.getCode());
    		rsp.setErrMsg(e.getMessage());
    		//响应
    		response.setContentType("application/json");
    		response.setCharacterEncoding(encoding);
    		out =  response.getWriter();
    		out.print(JSONObject.toJSONString(rsp));
    		logger.info(logStr+String.format("过滤校验未通过:token=%s, rsp=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),JSONObject.toJSONString(rsp)));
    		out.flush();
    	}finally {
			if(null!=out){
				out.close();
			}
		}
		
	}
	
	@Override
	public void destroy() {
		String logStr="AuthFilter.destroy...";
		logger.info(logStr+"销毁过滤器");
		
	}

}
分享到:
评论

相关推荐

    SpringMvc 拦截器

    Spring MVC的拦截器基于Servlet API的Filter和HandlerInterceptor接口,但相比Filter,Interceptor更关注于业务逻辑,更易于与Spring MVC的其他组件集成。 接下来,我们来创建一个简单的自定义拦截器。首先,我们...

    SpringMVC拦截器实现登录认证

    SpringMVC拦截器是实现登录认证的一种常见方法,它允许开发者在请求被实际处理之前或之后执行特定的逻辑。本文将深入探讨如何利用SpringMVC拦截器来实现这一功能。 首先,了解SpringMVC的核心组件是必要的。...

    SpringMVC拦截器的使用

    在实际开发中,`Interceptor_demo`这个压缩包文件可能包含了示例代码,包括Interceptor的实现以及相关的配置文件,帮助开发者更好地理解和实践Spring MVC的拦截器功能。通过阅读和学习这些示例,开发者可以快速掌握...

    过滤器与过滤器

    过滤器是Java Servlet规范的一部分,通过实现javax.servlet.Filter接口来创建。过滤器在请求到达目标Servlet或JSP之前进行拦截,对请求和响应进行修改,或者完全阻止请求。它们遵循一个预定义的生命周期,包括初始化...

    spring mvc拦截器过滤json中的null值

    首先,了解拦截器(Interceptor)在Spring MVC中的角色。拦截器是Spring MVC提供的一种AOP(面向切面编程)特性,允许我们在请求处理之前、之后或者在视图渲染之后进行一些预处理或后处理操作。我们可以利用拦截器来...

    SpringMVC拦截器——实现登录验证拦截器的示例代码

    在Spring MVC框架中,拦截器(Interceptor)是一种用于处理请求和响应之间通用逻辑的机制,例如权限检查、日志记录等。本示例主要展示了如何创建一个登录验证拦截器,确保只有登录过的用户才能访问特定的页面。 ...

    详解SpringMVC拦截器配置及使用方法

    SpringMVC拦截器可以用来执行一些通用的操作,如权限校验、日志记录、请求处理时间统计等。 拦截器配置及使用方法主要涉及以下几点: 1. 拦截器应用场景 拦截器在实际开发中有很多常见的应用场景。例如: - 日志...

    手动实现springmvc的简单功能

    我们可以创建一个拦截器接口和实现,处理预处理和后处理任务。 通过以上步骤,我们可以手动实现Spring MVC的基本功能。这不仅加深了对Spring MVC的理解,也有助于我们在实际开发中更加灵活地使用和扩展该框架。在`...

    SpringMVC通过拦截器实现IP黑名单

    SpringMVC 通过拦截器实现 IP 黑名单 SpringMVC 是一款基于 Java 语言的 Web 应用程序框架,它提供了许多强大的功能和灵活的配置方式。拦截器是 SpringMVC 中的一种机制,用于在请求处理过程中的某个点截断请求,并...

    SpringBoot实现过滤器、拦截器与切片的实现和区别

    过滤器的实现方式是自定义的过滤器都必须实现javax.Servlet.Filter接口,并重写接口中定义的三个方法:init、destroy和doFilter。init方法用于完成Filter的初始化,destroy方法用于Filter销毁前,完成某些资源的回收...

    springMVC拦截器HandlerInterceptor用法代码示例

    "springMVC拦截器HandlerInterceptor用法代码示例" springMVC拦截器HandlerInterceptor是一种非常重要的技术,它可以帮助我们拦截用户的请求,从而知道页面请求的是哪个class的哪个方法。本文将详细介绍springMVC...

    浅谈springMVC拦截器和过滤器总结

    过滤器需要实现`javax.servlet.Filter`接口,包含三个方法: 1. `doFilter(ServletRequest request, ServletResponse response, FilterChain chain)`: 这是过滤器的核心方法,通过`chain.doFilter(request, ...

    springmvc独立运行.zip

    7. **拦截器(Interceptor)**:可以添加自定义拦截器,对请求进行预处理或后处理,例如权限检查、日志记录等。 8. **转换器与格式化器(Converter & Formatter)**:这些组件用于在模型和HTTP请求之间自动转换数据类型...

    springMVC 用户登录权限验证实现过程解析

    SpringMVC 用户登录权限验证实现过程解析 本文主要介绍了 SpringMVC 中用户登录权限验证的实现过程解析,通过示例代码介绍了非常详细,对大家的学习或者工作具有一定的参考学习价值。 一、Interceptor 概述 在 ...

    SpringMvc HelloWorld

    6. **Interceptor**:拦截器,可以实现预处理和后处理,例如权限检查、日志记录等。 **总结** Spring MVC 是一款强大的 Web 开发框架,它的 "Hello, World!" 程序只是一个简单的起点。随着对框架的深入学习,你...

    SpringBoot定义过滤器、监听器、拦截器的方法

    在SpringBoot中,我们可以通过实现javax.servlet.Filter接口或使用注解来定义过滤器。过滤器的主要方法包括init、doFilter、destroy。 示例代码: ```java @WebFilter(filterName="customFilter", urlPatterns="/*...

    springMVC-4.3.9完整jar包

    9. **Interceptor**:拦截器,允许在请求处理前后执行自定义逻辑,如权限验证、日志记录等。 **关键配置:** 1. **web.xml**:通常会配置 DispatcherServlet,以及可能的 ContextLoaderListener,用于初始化 Spring...

    SpringMVC精品资源--Core knowledge system of Java back-end deve.zip

    12. **拦截器(Interceptor)**:SpringMVC的拦截器可以实现预处理和后处理逻辑,比如登录检查、权限控制、性能监控等。 13. **国际化与主题**:SpringMVC支持多语言和主题切换,通过消息源和主题解析器实现。 14....

    springMVC中基于token防止表单重复提交方法

    SpringMVC中基于Token防止表单重复提交方法是指通过在SpringMVC配置文件中添加拦截器配置,来拦截页面请求和表单提交请求,以防止表单重复提交。下面是该方法的实现思路和实现方式: 实现思路: 1. 在SpringMVC...

Global site tag (gtag.js) - Google Analytics