El uso de Filter en Java

I. Resumen

En segundo lugar, el uso de Spring

web.xmlLa clase de proxy del filtro se agrega en el archivo targetBeanNamey el valor es el valor del filtro id. Eso está @Component("authFilter")en authFilter.

	<!-- 统一认证过滤器的代理 -->
	<filter>
		<filter-name>DelegatingFilterProxy</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
		<init-param>
			<param-name>targetBeanName</param-name>
			<param-value>authFilter</param-value>
		</init-param>
		<init-param>
			<param-name>targetFilterLifecycle</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>DelegatingFilterProxy</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

@Component()Si no hay ningún parámetro, el valor predeterminado es la primera letra del nombre de la clase en minúsculas.

/**
 * 统一认证过滤器
 */
@Component("authFilter")
public class AuthFilter implements Filter {
    
    
    protected static final Logger logger = LoggerFactory.getLogger(AuthFilter.class);
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
    
    
 
        HttpServletRequest httpRequest = (HttpServletRequest)request;
        HttpServletResponse httpResponse = (HttpServletResponse)response;
        HttpSession session = httpRequest.getSession();
    }
}

3. Uso de SpringBoot

1. Método 1

@WebFilter(filterName = "dataFilter", urlPatterns = "/api/*")
@Order(1)
public class DataFilter implements Filter {
    
    
    @Override
    public void init(FilterConfig filterConfig) {
    
    
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    
    
    }
}

@ServletComponentScanAgregar anotaciones a la clase de inicio

//@ServletComponentScan({"com.scy.frame", "com.scy.app"})
@ServletComponentScan
@SpringBootApplication
public class Application {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(VideoScreenApplication.class, args);
    }
}

@ServletComponentScan funciona
en SpringBootApplication. Después de usar la anotación @ServletComponentScan en SpringBootApplication,
el servlet se puede registrar automáticamente directamente a través de la anotación @WebServlet.
El filtro se puede registrar automáticamente directamente a través de la anotación @WebFilter.
El oyente se puede registrar automáticamente directamente a través de la Anotación @WebListener.

2. Método 2

No use @WebFilterla forma de declarar el filtro, use FilterRegistrationBeanel filtro para inyectar en la clase de configuración

@Configuration
public class FilterConfiguration {
    
    
    @Bean
    public FilterRegistrationBean dataFilter(){
    
    
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new DataFilter());
        bean.setUrlPatterns(Arrays.asList("/api/*"));
        bean.setOrder(6);//优先级,越低越优先
        return bean;
    }
}

3. Método 3 (problemas)

No agregue @ServletComponentScanmás anotaciones a la clase de inicio, use @Componento @Configurationprovoque urlPatternsque la ruta de intercepción especificada no surta efecto, y todas las interfaces serán interceptadas.

@Component 
@WebFilter(filterName = "dataFilter", urlPatterns = "/api/*")
@Order(1)
public class DataFilter implements Filter {
    
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    
        chain.doFilter(request, response);
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_25775675/article/details/111181091
Recomendado
Clasificación