- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,我在其中使用 Spring Social Security 进行身份验证和授权。不幸的是,我在模拟 Spring Security 时遇到了一些问题。似乎它根本不起作用。
我有一个 REST Controller ,如果它应该返回的实体标识符不可用,它会返回 404 Not Found。如果用户未登录,则任何页面都会重定向到我的应用程序的社交登录页面。
我已阅读 here @WithUserDetails
注释最适合我。
所以我的测试方法看起来像这样
@Test
@SqlGroup({
@Sql(executionPhase = ExecutionPhase.BEFORE_TEST_METHOD, statements = "INSERT INTO UserAccount(id, creationtime, modificationtime, version, email, firstname, lastname, role, signinprovider) VALUES (1, '2008-08-08 20:08:08', '2008-08-08 20:08:08', 1, 'user', 'John', 'Doe', 'ROLE_USER', 'FACEBOOK')"), })
@Rollback
@WithUserDetails
public void ifNoTeamsInTheDatabaseThenTheRestControllerShouldReturnNotFoundHttpStatus() {
ResponseEntity<String> response = restTemplate.getForEntity("/getTeamHistory/{team}", String.class, "Team");
Assert.assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
}
@RunWith(SpringRunner.class)
@ActiveProfiles("dev")
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@Transactional
public class TeamRestControllerTest {
//...
}
最佳答案
我目前无法对其进行测试,但这是一个可能的解决方案。
查看@WithUserDetails 实现:
@WithSecurityContext(factory = WithUserDetailsSecurityContextFactory.class)
public @interface WithUserDetails {
...
}
final class WithUserDetailsSecurityContextFactory implements
WithSecurityContextFactory<WithUserDetails> {
private BeanFactory beans;
@Autowired
public WithUserDetailsSecurityContextFactory(BeanFactory beans) {
this.beans = beans;
}
public SecurityContext createSecurityContext(WithUserDetails withUser) {
String beanName = withUser.userDetailsServiceBeanName();
UserDetailsService userDetailsService = StringUtils.hasLength(beanName)
? this.beans.getBean(beanName, UserDetailsService.class)
: this.beans.getBean(UserDetailsService.class);
String username = withUser.value();
Assert.hasLength(username, "value() must be non empty String");
UserDetails principal = userDetailsService.loadUserByUsername(username);
Authentication authentication = new UsernamePasswordAuthenticationToken(
principal, principal.getPassword(), principal.getAuthorities());
SecurityContext context = SecurityContextHolder.createEmptyContext();
context.setAuthentication(authentication);
return context;
}
}
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@WithSecurityContext(factory = WithoutUserFactory.class)
public @interface WithoutUser {
}
public class WithoutUserFactory implements WithSecurityContextFactory<WithoutUser> {
public SecurityContext createSecurityContext(WithoutUser withoutUser) {
return SecurityContextHolder.createEmptyContext();
}
}
WithAnonymousUser
,
WithMockUser
,
WithSecurityContext
(和
WithUserDetails
)
关于unit-testing - @WithUserDetails 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41121184/
我有一个应用程序,我在其中使用 Spring Social Security 进行身份验证和授权。不幸的是,我在模拟 Spring Security 时遇到了一些问题。似乎它根本不起作用。 我有一个
类似于Authentication token passed to ControllerAdvice is null when running through MockMvc ,无论我手动添加上下文还
我编写了一些测试,尝试使用 @WithUserDetails 注释运行。但是,当我运行它时,它告诉我找不到我的自定义 UserDetailsService 实现。我怎样才能帮助测试类找到这个类?
在使用 Spring MockMVC 的 JUnit 测试中,有两种方法可以作为 Spring Security 用户进行身份验证:@WithMockUser 使用提供的凭据创建一个虚拟用户,@Wit
我想将 application.properties 中的值与 @WithUserDetails() 注释一起用于我的测试。 我当前的代码: @Value("${user.admin}") priva
我对 Spring Boot 的 TestEntityManager 和 @WithUserDetails 注释有疑问。 这是我的测试套件: public class AdvertisementAut
我是一名优秀的程序员,十分优秀!