gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:50 25 4
gpt4 key购买 nike

我正在尝试对我的 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/

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