public class MyClass{
public void action() {
}
public void test(){
MyClassNameTest.takeAction(this::action);
}
}
public interface MyInterface {
public void action();
default void printClassName(){
System.out.println("java version: " + System.getProperty("java.version"));
System.out.println("getCanonicalName: " + getClass().getCanonicalName());
System.out.println("getName: " + getClass().getName());
System.out.println("isAnonymousClass: " + getClass().isAnonymousClass());
}
}
Run Code Online (Sandbox Code Playgroud)
运行这个类:
public class MyClassNameTest {
public static void main(String[] args) {
new MyClass().test();
}
static void takeAction(MyInterface myInterface) {
myInterface.printClassName();
myInterface.action();
}
}
Run Code Online (Sandbox Code Playgroud)
getClass().getCanonicalName() …
大家:
我怎样才能获得ExceptionTranslationFilter的BeanDefinition在3.0.x和3.1.X产生的?我想重用它PropertyValue的BeanDefinition(accessDeniedHandler和authenticationEntryPoint).我发现我无法DefaultListableBeanFactory通过bean名称或类来获取它,似乎没有注册ExceptionTranslationFilter的BeanDefinition.
其他类似的过滤器UsernamePasswordAuthenticationFilter,它有一个bean名称:org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0.但ExceptionTranslationFilter没有一个.
我找到的唯一方法是迭代搜索filterChainProxy的属性,有没有更好的方法?
我在psuedo代码中做了什么:
BeanDefinitionBuilder builder =
BeanDefinitionBuilder.rootBeanDefinition(MyExceptionFilter.class);
RootBeanDefinition exceptionTranslationFilter = getExceptionTranslationFilterBeanDefinition();
PropertyValue accessDeniedHandler = exceptionTranslationFilter.getPropertyValues().getPropertyValue("accessDeniedHandler");
Object handler = (RootBeanDefinition) accessDeniedHandler.getValue();
builder.addPropertyValue("accessDeniedHandler", handler);
beanDefinitionRegistry.registerBeanDefinition("myFilter", builder.getBeanDefinition());
Run Code Online (Sandbox Code Playgroud)
所以,真正的问题是获取核心过滤器ExceptionTranslation的accesDeniedHandler的最佳方法是什么BeanDefinition