gpt4 book ai didi

java - 将自定义 AuthenticationProcessingFilter 与 结合使用(自动配置 ="true")

转载 作者:行者123 更新时间:2023-12-01 15:11:42 28 4
gpt4 key购买 nike

Spring security (2.0.x) http 命名空间,表单登录定义自动使用 AuthenticationProcessingFilter。

<form-login login-page='/logon.jsp' 
default-target-url='/home.jsp'
always-use-default-target='true' />

我也知道如果我设置 auto-config="false"我可以通过提供自定义 bean 定义来自定义身份验证。

我有 CustomAuthenticationProcessingFilter,它扩展了 AuthenticationProcessingFilter 并覆盖了 acquireUsername 并使用自定义逻辑来获取用户名而不是传递的用户名。

protected String obtainUsername(HttpServletRequest request) {
// custom logic to return username from parameter/cookies/header etc ...
}

是否可以在使用 CustomAuthenticationProcessingFilter 的同时仍然使用 auto-config="true" <form-login>无需定义 customAuthFilter 和所有依赖 bean ?

  <beans:bean id="customAuthFilter" class="x.y.z.CustomAuthenticationProcessingFilter">
<custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
<beans:property name="defaultTargetUrl" value="/home.jsp"></beans:property>
...
...
</beans:bean>

最佳答案

简介

Spring Security 2.0 处于维护模式,因此不会有任何官方更新。不过,您可以使用一些方法来解决此问题。

BeanPostProcessor

您可以使用 Spring Security FAQ 中的技巧就是使用BeanPostProcessor。您可以返回自定义过滤器,而不是修改属性。一个例子可能是这样的:

public class CustomFilterBeanPostProcessor implements BeanPostProcessor {
private Filter customFilter;

public Object postProcessAfterInitialization(Object bean, String name) {
if (bean instanceof AuthenticationProcessingFilter) {
return customFilter;
}
return bean;
}

public Object postProcessBeforeInitialization(Object bean, String name) {
return bean;
}

public void setFilter(Filter filter) {
this.customFilter = filter;
}
}

那么您的配置将包括以下内容:

  <beans:bean class="CustomFilterBeanPostProcessor">
<beans:property name="filter" ref="customAuthFilter"/>
</beans:bean>

在属性之前使用

另一种方法是在 AuthenticationProcessingFilter 之前插入自定义过滤器。这将有一个额外的过滤器,但它应该是侵入性最小的,因为它很小并且不应该被到达(即,因为自定义过滤器仅在 AuthenticationProcessingFilter 忽略请求时继续过滤器链)。使用此方法的示例配置如下所示:

<beans:bean id="customAuthFilter" class="x.y.z.CustomAuthenticationProcessingFilter">
<custom-filter before="AUTHENTICATION_PROCESSING_FILTER" />
<beans:property name="defaultTargetUrl" value="/home.jsp"></beans:property>
...
...
</beans:bean>

关于java - 将自定义 AuthenticationProcessingFilter 与 <form-login> 结合使用(自动配置 ="true"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12261620/

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