В комментариях весенней команды по проблеме github ссылка предлагается создать фильтр для перехвата конечной точки привода.
Вы можете создать фильтр сервлета и добавить логи аутентификации c.
Вот пример:
@Component
public class ActuatorFilter implements Filter {
private final BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor();
private String encryptedPassword;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
try {
File file = ResourceUtils.getFile("classpath:password.txt");
try (FileReader reader = new FileReader(file)) {
char[] chars = new char[(int) file.length()];
reader.read(chars);
encryptedPassword = new String(chars);
} catch (IOException e) {
e.printStackTrace();
}
}catch (FileNotFoundException e){
e.printStackTrace();
}
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String url = request.getRequestURI().toString();
String rawPassword = request.getHeader("Authorization");
if(url.equals("/actuator/shutdown") && !passwordEncryptor.checkPassword(rawPassword,encryptedPassword)){
response.setStatus(HttpStatus.UNAUTHORIZED.value());
PrintWriter out = response.getWriter();
out.print("Invalid password");
out.flush();
return;
}
chain.doFilter(req, res);
}
@Override
public void destroy() { }
}
В приведенном выше коде я использовал jasypt
для шифрования пароля и сопоставления его в фильтре.
Вы можете использовать new BasicPasswordEncryptor().encryptPassword(rawPassword);
для получите зашифрованный пароль и сохраните его в БД или в файле. В приведенном выше коде я сохранил зашифрованный пароль в password.txt
в папке resources
![enter image description here](https://i.stack.imgur.com/9tIoz.png)