我所有的其余控制器都会向第三方网络服务请求以获得权限。
syncronized
添加到向第三方服务发出请求的函数中。但其他开发人员告诉我这不是正确的解决方案。我很困惑。如果有人帮忙,我会整天为他/她祈祷。谢谢。
JwtAuthenticationFilter:@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String token = getTokenFromRequest(request);
if(StringUtils.hasText(token) && jwtService.validateToken(token)){
String username = jwtService.getUserName(token);
//problem is here above
UserDetails userDetails = customUserDetailsService.loadUserByUsername(username);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
username,
null,
userDetails.getAuthorities()
);
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
}
filterChain.doFilter(request, response);
}
以及方法内部:
SimpleHttpRequest request = SimpleRequestBuilder.get(url).addParameter("username",username)
.addHeader("Content-Type","application/json").addHeader("Accept","*/*").build();
CloseableHttpAsyncClient client = HttpAsyncClients.custom()
.build();
client.start();
Future<SimpleHttpResponse> future = client.execute(request, null);
SimpleHttpResponse response = future.get();
ObjectMapper objectMapper = new ObjectMapper();
String code = String.valueOf(response.getCode());
List<UserAuthorityDto> authorities=objectMapper.readValue(response.getBody().getBodyText(), UserAuthorityDto.class).getAuthorities()
.stream()collect(Collectors.toList());
client.close();
return CompletableFuture.completedFuture(yetkiler);
500 错误是由代码中的异常引起的。如果不知道错误的根源,就很难进行调试。您应该检查 Spring Boot 应用程序的控制台,看看是否有任何异常或堆栈跟踪。
我建议的第一件事是将您的方法包装在 try/catch 语句中并记录错误,以便您可以更清楚地了解正在发生的情况。
对于初学者,只需执行以下操作:
@RestController
class MyController {
private static final Logger LOGGER = LoggerFactory.getLogger(MyController.class);
public Object getResult() {
try {
...
// All your code here
} catch (e: Throwable) {
}