作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 xml 文件(applicationCtx-security.xml),其中定义了所有 Spring Security 过滤器和自定义过滤器及其 bean。我需要实现一个自定义过滤器,该过滤器应在任何 http 响应后调用,以便我可以在每个 http 响应后清除我的用户主体。
已经尝试过SecurityContextPersistenceFilter
public class ResponseFilter extends SecurityContextPersistenceFilter implements Filter{
private static final Log log = LogFactory
.getLog(ResponseFilter.class);
public static final String USERNAME_KEY = "username";
public ResponseFilter() {
System.out.println("Inside constructor of ResponseFilter");
}
xml:
<beans:bean id="securityContextPersistenceFilter" class="org.springframework.security.web.context.SecurityContextPersistenceFilter">
<beans:property name='securityContextRepository'>
<beans:bean class="com.web.ResponseFilter">
</beans:bean>
</beans:property>
</beans:bean>
我实现的代码没有被调用。有什么建议吗?
最佳答案
您不需要将过滤器注册为 bean。但要让它工作,你必须在 Spring Security 配置中注册你的自定义过滤器,它必须有 doFilter
为某些自定义行为覆盖的方法,在您的情况下是消息输出 - 构造函数仅设计用于 Java 编程语言中的类的初始化。
这就是使用注释完成的方式,您必须将此配置注册为 XML 文件中的 bean。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// constructor
@Override
protected void configure(HttpSecurity http) throws Exception {
// custom configuration of your http
//register the filter
http.addFilterAfter(new ResponseFilter(), ResponseFilter.class);
}
}
另外,不要忘记将过滤器放入覆盖的 doFilter
的链中方法如下:
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain filterChain) throws IOException, ServletException {
// other code is omitted for brevity
//move on to the next filter in the chains
filterChain.doFilter(req, res);
}
SecurityContextPersistenceFilter
已经是一个过滤器,所以你不需要实现 Filter 并且它不是我建议在大多数情况下实现的过滤器类 - 最好扩展 GenericFilterBean
相反,在大多数情况下。
关于Java - 我需要一个自定义 spring 过滤器,应在 http 响应后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58059551/
我是一名优秀的程序员,十分优秀!