- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
springboot版本从2.5.6升级到2.6.3
升级后为配置类编写的测试用例抛出 nullpointerException。
HttpSecurity.authorizeRequests() 在 configure() 方法中抛出 NullPointerException。
在最新版本中,ExpressionUrlAuthorizationConfigurer(ApplicationContext 上下文)的实现已更改,它试图从 ApplicationContext 中获取 getBeanNamesForType,这导致了 NullpointerException(在 HttpSecurity-> authorizeRequests 中调用的 getContext 方法在旧版本和最新版本中都返回 null)
测试用例
@Mock
AuthenticationManagerBuilder amb;
@Mock
ObjectPostProcessor<Object> opp;
@Mock
Map<Class<? extends Object>, Object> sharedObjects;
@Test
public void configureTrue() throws Exception{
HttpSecurity http=new HttpSecurity(opp, amb, sharedObjects);
SecurityConfig securityConfig=new SecurityConfig();
securityConfig.requireHttps=true;
securityConfig.managementSecurityEnabled=true;
securityConfig.configure(http); //calls conigure method of configuration class(Failing here)
securityConfig.requireHttps=false;
securityConfig.managementSecurityEnabled=false;
assertNotNull(http);
}
App.java(有SecurityConfig.class的Main方法类)
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public static class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${management.security.enabled}")
protected boolean managementSecurityEnabled;
@Value("${security.require_ssl}")
protected boolean requireHttps;
public boolean isManagementSecurityEnabled() {
return managementSecurityEnabled;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
if (isManagementSecurityEnabled()) {
// authorizeRequests() is the one throwing nullpointerException
http.antMatcher("/management/admin/v1/met/**").authorizeRequests().anyRequest()
.hasRole("ACTUATOR").and().httpBasic();
}
}
}
HttpSecurity.class
public ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry authorizeRequests()
throws Exception {
ApplicationContext context = getContext(); //getting null for context
return getOrApply(new ExpressionUrlAuthorizationConfigurer<>(context)).getRegistry();
}
ExpressionUrlAuthorizationConfigurer
/**
* Creates a new instance
* @see HttpSecurity#authorizeRequests()
*/
public ExpressionUrlAuthorizationConfigurer(ApplicationContext context) {
//Getting failed here(NullPointer Exception) since we are getting context as null
String[] grantedAuthorityDefaultsBeanNames = context.getBeanNamesForType(GrantedAuthorityDefaults.class);
if (grantedAuthorityDefaultsBeanNames.length == 1) {
GrantedAuthorityDefaults grantedAuthorityDefaults = context.getBean(grantedAuthorityDefaultsBeanNames[0],
GrantedAuthorityDefaults.class);
this.rolePrefix = grantedAuthorityDefaults.getRolePrefix();
}
else {
this.rolePrefix = "ROLE_";
}
this.REGISTRY = new ExpressionInterceptUrlRegistry(context);
}
最佳答案
以下代码有效:
private HashMap<Class<?>, Object> getSharedObjets(){
HashMap map = new HashMap<Class<?>, Object>();
GenericApplicationContext context= new GenericApplicationContext();
context.refresh();
map.put(ApplicationContext.class, context);
return map;
}
关于java - 如何模拟 ApplicationContext context = getContext(); HttpSecurity 以防止以下测试用例中的 nullPointer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70940131/
我想在遗留应用程序中使用 Spring。 核心部分是一个类,我们称之为LegacyPlugin,它代表应用程序中的一种可插入部分。问题是这个类也是数据库连接器,并且用于创建许多其他对象,通常通过构造函
我有 3 个应用上下文: 负责启动 Jetty servlet 容器的全局上下文,从 main() 启动 jetty 中每个 webapp 的 applicationContext 父级(由 Spri
我通过以下代码在应用程序上下文中设置 applicationContext-dao.xml 和 applicationContext-service.xml。 proj
我正在尝试使用 Spring 运行 JUnit 测试,但控制台显示: 无法加载 ApplicationContext 错误。我正在使用 Maven 结构,并且在 src/main/resources
我的applicationContext.xml,webmvc-config.xml在WEB-INF/spring/applicationContext.xml 当我尝试以下操作时,它没有加载,我得到
我正在尝试从 WCSession 获取最新数据我不明白为什么即使我刚刚收到 didReceiveApplicationContext称呼。 更多细节可以直接在代码中获得: //Watch Code o
我正在尝试运行 mvn integration-test阶段,我得到 Failed to load ApplicationContext执行集成测试时出错(单元测试正确执行)。我正在使用 Spring
我在创建测试类时遇到问题。基本上我想测试执行网络调用的 View 模型类。使用 dagger 注入(inject)类网络组件需要上下文参数来检查连接,这是我的 View 模型: class MyVie
我有一个带有 Spring 插件的 struts2 Web 项目。 applicationContext.xml 位于 /WEB-INF/applicationContext.xml 我如何在我的类(
我在一个名为 Controller 的全局类中声明的全局变量有一个小问题,该全局类是从应用程序扩展的。 当我启动 Activity A 时,我在 Controller 中有一个包含 0 个项目的数组列
当我运行我的 spring 集成 junit 类时,我遇到了异常。 这是我的类(class) @RunWith(SpringJUnit4ClassRunner.class) @ContextConfi
我是 java EE spring boot 的新手,我想我会开始一个小项目来掌握一些东西,我目前遇到如上所述的错误 failed to load ApplicationContext 我是不知道为什
我只能在 Spring (3.0.5) jdbc 应用程序(在 Oracle 11.2 上运行)中获取 Activity 的编程事务,当txAdvice指向从应用程序上下文调用的实际方法(mainTe
在servet类中,可以通过这种方式获取spring ApplicationContext ApplicationContext ctx = WebApplicationContextUtils.ge
抱歉,如果我的术语不正确,我是 C# 的新手。我正在尝试使用 ApplicationContext 文件来存储 mysql conn 值,如 dbname、用户名、密码。带有 mysql conn 字
我正在尝试在所有 ContextXXXEvent 上使用 ContextEventListener我为每种事件类型创建了一个监听器,如下所示(ContextRefreshedEvent 是一个示例):
我的应用程序有一个 application-context.xml。现在我将 ApplicationContext 实例化为: ApplicationContext context = new Cla
我正在开发一个 spring 3 web 服务应用程序,我正在尝试从我的 servlett.xml 文件加载 ApplicationContext 以用于一个简单的测试用例,但它不起作用。 Appli
在我的应用程序完成后,我想关闭 spring 上下文。 相关代码有一个 ApplicationContext 引用,但我找不到 close 方法。 最佳答案 贬低你的ApplicationContex
我在尝试为 kotlin 多平台自定义上下文时遇到了这个问题 Actual typealias 'ApplicationContext' has no corresponding expected d
我是一名优秀的程序员,十分优秀!