0

Roles我正在对象中实现 Spring 安全性Authentication,用于通过@Secure("ROLE")注释限制我的服务中的访问。一切似乎都很好,并且对于身份验证不好的角色 Spring Security throw Access Denied Exception

我的问题出现在我的集成测试中,因为我正在使用一些 init 惰性 bean 以便在测试开始之前加载一些信息,并且在那一刻,当我试图访问这个有限的服务时,我收到了Access denied exception. 在我的单元测试中我解决了同样的问题,并使用了一些带有安全注释的服务来创建Authentication对象,并添加到SpringContextHolder.

  List<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList("ADMIN_ROLE");
    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken("test@test.com", "test", authorities);
    SecurityContextHolder.getContext().setAuthentication(authentication);

但是当我启动我的 Jetty 服务器进行集成测试,并且我的 init 惰性 bean 正在运行并运行此代码时,情况不像在单元测试中那样工作,并且 Spring 向我抛出了Access denied exception因为AuthenticationSecurityContext.

请有人可以帮助我!

4

2 回答 2

0

您需要将 SecurityContext 附加到会话中。由于它是 Threadbound,否则它将丢失以备将来使用。有关详细信息,请参阅以下答案。https://stackoverflow.com/a/16778652/2319179

于 2013-06-19T09:21:55.923 回答
0

我发现在初始化惰性禁令运行期间使用 @PreAuthorize("hasRole('USER_ROLE')") 正在工作。所以我可以避免在我的会话中添加 SecurityContext。Abd 感谢主,因为 init 惰性 bean 不是 Servlet,所以不可能按照您的建议进行

于 2013-06-20T11:14:12.813 回答