私はJWTを使用して認証するためのスプリングベースのサービスに取り組んでいます。Spring Securityは複数のスレッド間でコンテキストを共有しますが、どうすればこの問題を回避できますか?
ユーザーの要求を処理するサービスは、セキュリティコンテキストを設定し、かなりこのように見えるフィルターに認可サービスを呼び出します。
@Component
public class TokenAuthenticationFilter extends OncePerRequestFilter {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private AuthorizationServiceClient authorizationServiceClient;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
try {
User user = authorizationServiceClient.requestUserFromToken(request.getHeader("X-Auth-Token"));
SecurityContextHolder.getContext().setAuthentication(new UserAuthentication(user));
filterChain.doFilter(request, response);
SecurityContextHolder.getContext().setAuthentication(null);
} catch (HttpClientErrorException e) {
response.sendError(e.getStatusCode().value());
}
}
}
AuthorizationServiceClientは、ユーザーのの検証を処理リモートサービスを呼び出します役割と資格情報
私は非常に奇妙な行動に直面しています
私のUI上のページには、同時に複数の要求を作っていたとき、私は500を取得してしまう、NullPointerExceptionが発生によって引き起こされます。
根本的な原因は、ユーザーが持っているプリンシパル(ユーザーのIDを含む)がnullである場合です。