这里有我的控制器方法:
@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
。
除此之外,我现在无法更改此代码,并且我想知道如何使用"String user"
向委托人提供@WithMockUser
。
答案 0 :(得分:0)
您应仅使用“ ==”验证用户名,而不验证整个主体对象。
@PreAuthorize(“主体。用户名 =='” + EspaiDocConstants.BO_COMPONENT_APP + “'”)