Spring security Spring security DefaultMethodSecurityExpressionHandler bean未注册用于集成测试';默认的spring安全配置
我正在尝试为视图层编写带有Spring安全性和Thymeleaf的Spring MVC集成测试 我已经使用Spring Security Integration设置了MockMvc对象,就像文档中的所有示例一样 集成测试设置:Spring security Spring security DefaultMethodSecurityExpressionHandler bean未注册用于集成测试';默认的spring安全配置,spring-security,thymeleaf,spring-test,spring-test-mvc,spring-mvc-test,Spring Security,Thymeleaf,Spring Test,Spring Test Mvc,Spring Mvc Test,我正在尝试为视图层编写带有Spring安全性和Thymeleaf的Spring MVC集成测试 我已经使用Spring Security Integration设置了MockMvc对象,就像文档中的所有示例一样 集成测试设置: import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*; import static org.springframework.securi
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*;
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.*;
import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
//.defaultRequest(get("/").with(user(someUser)))
.apply(springSecurity())
.build();
}
Thymeleaf配置为使用SpringSecurityDialogue。(thymeleaf-extras-springsecurity4)
为了能够在视图层中使用spring安全表达式(示例)
如果您正在使用
@ContextHierarchy
为测试加载WebApplicationContext
,那么这将不适用于Spring Framework 4.1.4到4.1.6,因为4.1.7中会修复一个已确认的错误
有关详细信息,请参阅。降级到Spring v4.1.3“修复”了此问题。。。这让我怀疑这是一个bug。
additionalDialects.add( new SpringSecurityDialect());
<p sec:authorize="hasRole('ROLE_USER')"> User logged in</p>
@SuppressWarnings("unchecked")
private static SecurityExpressionHandler<FilterInvocation> getExpressionHandler(final ServletContext servletContext) {
final ApplicationContext ctx =
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
final Map<String, SecurityExpressionHandler> expressionHandlers =
ctx.getBeansOfType(SecurityExpressionHandler.class);
for (SecurityExpressionHandler handler : expressionHandlers.values()) {
if (FilterInvocation.class.equals(GenericTypeResolver.resolveTypeArgument(handler.getClass(), SecurityExpressionHandler.class))) {
return handler;
}
}
throw new TemplateProcessingException(
"No visible SecurityExpressionHandler instance could be found in the application " +
"context. There must be at least one in order to support expressions in Spring Security " +
"authorization queries.");
Spring v4.1.6
Spring Security 4.0.1
Thymeleaf v2.1.4