web应用中,我们经常使用filter机制来确定外部请求的用户是否登录,角色是否合法等。Spring提供了
一个DelegatingFilterProxy机制来完成filter的部分功能。通过例子做一个简单对比。 二者看起来
没有什么太大的区别,在spring中,filter被纳入了bean 管理机制。
1.servlet filter
* LoginFilter .java
package servlet.filter;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class LoginFilter implements Filter {
protected FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void destroy() {
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws java.io.IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String username = req.getParameter("j_username");
System.out.println("this is in servlet filter");
chain.doFilter(request, response);
}
}
*web.xml
<filter>
<filter-name>simplelogin</filter-name>
<filter-class>servlet.filter.LoginFilter</filter-class>
<init-param>
<param-name>hello</param-name>
<param-value>hello filter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>simplelogin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2. Spring filter
*LoginFilter.java
package filter;
import java.io.IOException;
import java.security.Principal;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.logging.*;
public class LoginFilter implements Filter {
private FilterConfig filterConfig = null;
Log log = LogFactory.getLog(LoginFilter.class);
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
Principal principal=request.getUserPrincipal();
HttpServletResponse response=(HttpServletResponse)res;
log.info("filter user name:"+request.getParameter("j_username")+":"+principal.toString
());
log.info("filter password :"+request.getParameter("j_password"));
chain.doFilter(req,res);
}
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
}
public void destroy() {
filterConfig = null;
}
}
*
web.xml
<filter>
<description>LoginFilter</description>
<display-name> LoginFilter</display-name>
<filter-name>LoginFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<description>
</description>
<param-name>targetBeanName</param-name>
<param-value>loginFilter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*spring context config
<bean id="loginFilter" class="filter.LoginFilter" />
分享到:
相关推荐
开发者无需在Filter或Servlet内部硬编码bean名称,而是通过Spring容器自动注入所需的依赖,大大提升了代码的整洁度和复用性。此外,Spring提供的Filter和Servlet代理类,进一步简化了集成过程,使开发者可以专注于...
在Spring框架中,`DelegatingFilterProxy`是一个非常有用的工具,它允许我们将Spring的Bean作为Servlet过滤器(Filter)来使用。这个组件是Spring MVC的一部分,主要用于将Spring的AOP(面向切面编程)能力引入到Web...
- `DelegatingFilterProxy`:Spring提供的Filter,用于代理Spring的Bean,例如Spring Security的Filter链。 - 编写自定义Filter:扩展`javax.servlet.Filter`类,实现`doFilter`方法,然后在`web.xml`中配置。 3....
在Spring框架中,我们通常使用DelegatingFilterProxy来整合Spring的AOP(面向切面编程)功能与Servlet过滤器。 1. **DelegatingFilterProxy**: 这是Spring提供的一个特殊Filter,它的主要作用是将过滤器的职责委托...
在Servlet环境中,Spring Security通过集成到Servlet的过滤器链(Servlet Filter Chain)中来实现在Web应用中的安全控制。以下是关于Spring Security如何在Servlet中执行的详细说明: 1. **Servlet Filter Chain**...
DelegatingFilterProxy是一个特殊的Servlet Filter,它将过滤器的工作委托给Spring容器管理的一个Bean。这样,我们可以在Spring配置文件中定义一个Bean,并将其类型设置为实际的过滤器实现类。 Java 8 (JDK1.8)引入...
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/* </filter-mapping...
最后,应用的启动入口通常是一个Servlet或Filter,例如Spring的ContextLoaderListener或DelegatingFilterProxy,它们负责初始化Spring容器,并在Web应用启动时加载配置。 总结起来,整合Spring、SpringMVC和MyBatis...
5. 初始化过程:在Web应用程序启动时,SpringSecurity的配置会加载到Spring的ApplicationContext中,`springSecurityFilterChain`这个bean被创建并包含了一系列的Filter实例。当HTTP请求到达时,...
在`/WEB-INF/cxf-servlet.xml`中,我们可以配置CXF的服务行为,比如如何处理异常,以确保与Spring Security的集成流畅。 通过这种方式,Spring Security可以有效地保护CXF服务中的业务方法,确保只有经过身份验证和...
Spring Web为Servlet Filter提供了`GenericFilterBean`,这是一个抽象的Filter实现,它将Filter与Spring的依赖注入(DI)和面向切面编程(AOP)结合起来。`GenericFilterBean` 是Spring IoC容器中的一个Bean,因此...
该框架能够在Web请求级别和方法调用级别处理身份验证与授权问题,并且深度集成了Spring Framework的核心特性,如依赖注入(DI)和面向切面编程(AOP)。通过这些集成,开发者可以更加灵活地定制安全性策略,同时也...
- **Filter的注册与配置**:理解Spring Security如何通过`DelegatingFilterProxy`将Spring Bean注册为Servlet Filter,并配置过滤链。 - **SecurityContextHolder**:查看如何在应用程序中设置和获取安全上下文,...
当配置完成后,开发者可以像往常一样使用标准的Servlet API来获取和设置Session,而底层则会通过Spring-Session将这些信息存储在Redis中。 下面展示了一个简单的示例,该示例演示了如何在控制器中设置Session: ``...
- 例如,`DelegatingFilterProxy` 是Spring提供的一个Filter,用于代理Spring Bean,通常用于配置Spring Security的`FilterSecurityInterceptor`。 3. **实现用户权限过滤器** - 创建自定义Filter:你需要创建一...
该框架能够在Web请求级别以及方法调用级别处理身份验证(Authentication)与授权(Authorization)。 #### 二、Spring Security 的应用场景 - **适用于Java工程师**:Spring Security主要针对Java开发者,尤其是那些...
- **配置 Shiro 过滤器**:在 web.xml 中添加 DelegatingFilterProxy 过滤器,它的作用是将请求委托给 Spring 容器中的 Bean 来处理。在这里,我们配置的 filter-name 是 "abc",对应的是 Spring 配置文件中的 Bean...
- 在Spring配置文件中定义`message-broker` bean,并指定相应的属性。 - 示例配置: ```xml <bean id="messageBroker" class="org.springframework.messaging.simp.config.MessageBrokerRegistry"> <value>/...
7. **Spring框架中的Filter**:在Spring MVC中,虽然可以使用传统的Servlet Filter,但Spring也提供了DelegatingFilterProxy,它可以用来代理Spring的Bean,这样过滤器也能享受到Spring的依赖注入。 通过分析和实践...
在Spring MVC框架中,可以使用Spring的DelegatingFilterProxy来代理Spring的Bean,这样可以利用Spring的依赖注入和AOP特性。 9. **动态过滤** 通过编程方式动态地添加、删除过滤器,可以实现更加灵活的过滤策略。...