저는 JWT를 인증 용으로 사용하는 스프링 기반 서비스를 연구하고 있습니다.봄 보안 공유 다중 스레드간에 컨텍스트, 어떻게 피할 수 있습니까?
사용자 요청을 처리하는이 서비스는 보안 컨텍스트를 설정하고 다음과 같이 꽤 많이 보이는 필터의 인증 서비스를 호출
@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에 페이지가 동시에 여러 요청을했다, 나는 NullPointerException이 발생 500을 그만 둘.
근본 원인은 없어야 할 때 null 인 사용자 (사용자 ID 포함)입니다.