【发布时间】:2019-06-22 14:50:37
【问题描述】:
这里有我的控制器方法:
@PreAuthorize("principal == '" + EspaiDocConstants.BO_COMPONENT_APP + "'")
public void ingestAudits() {
// Do something
}
如您所见,它使用@PreAuthorize("principal == '" + EspaiDocConstants.BO_COMPONENT_APP + "'") 进行保护
这是我的测试代码:
@WithMockUser(username=EspaiDocConstants.BO_COMPONENT_APP)
@Test
public void test() throws IOException, NoSuchAlgorithmException {
this.controller.ingestAudits();
}
不过,我收到了这条异常消息:
DigestAuditsTest.test:91 » AccessDenied 访问被拒绝
编辑
为了填充主体,我使用了自定义过滤器:
public class JWTAuthorizationFilter extends BasicAuthenticationFilter {
@Override
protected void doFilterInternal(
HttpServletRequest req,
HttpServletResponse res,
FilterChain chain
) throws IOException, ServletException {
String user = Jwts.parser().setSigningKey(SECRET)
.parseClaimsJws(token.replace(TOKEN_PREFIX, ""))
.getBody().getSubject();
SecurityContextHolder.getContext()
.setAuthentication(
new UsernamePasswordAuthenticationToken(user, null)
);
chain.doFilter(req, res);
}
}
所以,principal 是一个包含用户的String。
除此之外,我现在无法更改此代码,我想知道如何使用@WithMockUser 向委托人提供"String user"。
【问题讨论】:
标签: java spring-boot spring-security spring-test spring-security-test