java - 在请求范围内使用工厂方法 Autowiring

标签 java spring spring-mvc spring-security

我正在尝试对我的 Spring 应用程序进行单元测试。 使用 Spring-Security,我无法模拟 SecurityContext 以便对我的 Controller 进行单元测试。

我发现了以下问题:Unit testing with Spring Security

我正在尝试让“社区维基”答案(此时是第二个答案)在我的网络应用程序上运行。

我主要使用注释驱动的开发然后我有以下内容:

主 Controller .java

@Controller
public class MainController {

    private User currentUser;

    @Autowired
    @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public void setCurrentUser(User currentUser) {
        this.currentUser = currentUser;
    }

    ...

}

用户工厂.java

@Component
public class UserFactory {

    @Bean
    public User getUserDetails() {
        Authentication a = SecurityContextHolder.getContext().getAuthentication();
        if (a == null) {
            return null;
        } else {
            return (User) a.getPrincipal();
        }
    }
}

用户.java

public class User implements UserDetails {

    private long userId;
    private String username;
    private String password;
    private boolean enabled;
    private ArrayList<GrantedAuthority> authorities;

    public User() {

    }

    ...

}

问题是 getUserDetails() 方法似乎从未被调用过,而且 UserFactory 也从未被使用过。 (我尝试了 System.out.println 并尝试了调试器)

但是没有关于 MainController 在运行时或在任何请求时没有被连接的错误。

属性 currentUser 似乎总是空的。

我也查看了这个问题,但没有找到满足我需求的东西:problem in Spring session scope bean with AOP

这是我的第一个 Spring web 应用程序,请不要苛刻。 :)

最佳答案

我注意到的第一件事是您将 @Scope 放在了错误的位置。它应该继续 @Bean 方法,而不是 @Autowired 方法,即

@Autowired
public void setCurrentUser(User currentUser) {

@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public User getUserDetails() {

令我惊讶的是 Spring 没有对此提示。

关于java - 在请求范围内使用工厂方法 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940219/

相关文章:

java - Spring 休息-发布文件

java - 如何使用多线程允许多个客户端连接到服务器?

java - 如何导入字体?

java - 映射嵌套 beans 列表 : "org.mapstruct.Mapping"

java - JerseyConfig 在 Spring Boot 应用程序中覆盖 @RestController

spring - 为什么 beans 会被拒绝以及未识别出 URL 路径意味着什么?

java - 您的处理程序是否实现了像 Controller 这样受支持的接口(interface)?

java - Java中的$符号是什么?请查看下面的 Java 代码

Java 正弦和余弦

java - Spring Security - SPRING_SECURITY_LAST_EXCEPTION 的文档