小编Haw*_*awk的帖子

在不同的 Java 版本中运行时 getCanonicalName() 返回 null

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)

重现步骤

  1. 在 java 1.8 或 11 中编译上述类
  2. 在 java 15 或更高版本中运行 MyClassNameTest

当前结果

getClass().getCanonicalName() …

java

5
推荐指数
1
解决办法
323
查看次数

如何获得由<http>创建的ExceptionTranslationFilter的BeanDefinition

大家:

我怎样才能获得ExceptionTranslationFilterBeanDefinition在3.0.x和3.1.X产生的?我想重用它PropertyValueBeanDefinition(accessDeniedHandlerauthenticationEntryPoint).我发现我无法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

spring-security

3
推荐指数
1
解决办法
6535
查看次数

标签 统计

java ×1

spring-security ×1