gpt4 book ai didi

Java - 我需要一个自定义 spring 过滤器,应在 http 响应后调用

转载 作者:行者123 更新时间:2023-12-02 00:24:37 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com