为RemembermeAuthenticationFilter
提供AuthenticationAuthenticationFilter
的AuthenticationAuthentication
会破坏筛选器链,因此我希望通过提供RemembermeAuthenticationFilter
的自定义实现来重写其OnSuccessfulAuthentication
但是当使用简单的Java配置时,这似乎相当复杂或复杂。
如果需要访问HttpServletRequest
或HttpServletResponse
,则提供ApplicationEventPublisher
不是解决方案。
我设法做到了,但这看起来像一个黑客--有更好的方法吗?
我是这样做的:
http.rememberMe().addObjectPostProcessor(new ObjectPostProcessor<RememberMeAuthenticationFilter>() {
@Override
public <O extends RememberMeAuthenticationFilter> O postProcess(O object) {
RememberMeAuthenticationFilter newFilter = new RememberMeAuthenticationFilter(
(AuthenticationManager) getByReflection(object, "authenticationManager"),
(RememberMeServices) getByReflection(object, "rememberMeServices")
) {
@Override
protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) {
// business logic
}
};
return (O) newFilter;
}
private <O extends RememberMeAuthenticationFilter> Object getByReflection(O object, String name) {
Field field = ReflectionUtils.findField(object.getClass(), name);
ReflectionUtils.makeAccessible(field);
return ReflectionUtils.getField(field, object);
}
});
如果您希望在身份验证过程(使用remember me特性)成功时实现自定义行为,可以尝试:
定义新筛选器,例如:
public class CustomRememberMeAuthenticationFilter extends RememberMeAuthenticationFilter {
@Override
protected void onSuccessfulAuthentication(final HttpServletRequest request, final HttpServletResponse response, final Authentication authResult) {
super.onSuccessfulAuthentication(request, response, authResult);
if (authResult != null) {
// process post authentication logic here..
}
}
}
在安全链中设置客户filer:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/","/login*").permitAll()
//...
http
.addFilter(rememberMeAuthenticationFilter())
//...
}
@Bean
protected RememberMeAuthenticationFilter rememberMeAuthenticationFilter(){
return new CustomRememberMeAuthenticationFilter(authenticationManager(),rememberMeServices());
}
比如 其实相当于 代码不需要手动处理就可以执行。
在我们的Spring Boot应用程序中,我们使用Spring Cloud AWS: Spring-Cloud-Starter-AWS Spring-Cloud-AWS-AutoConfigure Spring-Cloud-AWS-Messaging 若要从SQS队列接收消息,请执行以下操作。然而,我们需要能够启动应用程序,即使队列不可访问(即“(服务:AmazonSQS;状态代码:403;错误代
本文向大家介绍TensorFlow实现自定义Op方式,包括了TensorFlow实现自定义Op方式的使用技巧和注意事项,需要的朋友参考一下 『写在前面』 以CTC Beam search decoder为例,简单整理一下TensorFlow实现自定义Op的操作流程。 基本的流程 1. 定义Op接口 2. 为Op实现Compute操作(CPU)或实现kernel(GPU) 3. 将实现的kernel
问题内容: 这是我的问题:我有一个对话框,其中包含一些用户可以更改的参数(例如,通过微调器)。每次更改这些参数之一时,我都会启动一个线程以根据新的参数值更新3D视图。如果在第一个线程正在工作时用户更改了另一个值(或通过单击微调箭头多次再次更改了相同的值),我想中止第一个线程(以及3D视图的更新)并启动一个新线程具有最新的参数值。 我该怎么做? PS:我的线程的方法中没有循环,因此检查标志不是一个选
我需要实现我的自定义DefaultComboxModel。这样做的原因是每次我打电话给 或者 或者 我看到它自动触发一个项目状态更改事件。这会导致一些随机项目自动从列表中选择。这不是我想要的,因为它用随机选择的项目填充可编辑的JTextField。 这是我在使用我的自定义Itemlistener中的Thread.dumpStack()进行调试时看到的stacktrace,它是我在调用上述方法时看到
本文向大家介绍Java如何实现自定义异常类,包括了Java如何实现自定义异常类的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 自定义异常类步骤 创建一个类继承异常父类Exception 在具体的实现方法首部抛出异常类(自己创建的那个类),throws的