Разоблачение самоанализа Graphql с помощью Spring (Boot) SecurityJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Разоблачение самоанализа Graphql с помощью Spring (Boot) Security

Сообщение Anonymous »

У меня есть довольно стандартное приложение Spring Boot, которое я только что начал с Spring Security с использованием JWT. Я добавил поддержку GraphQL при запуске весенней загрузки (что я делал в прошлом для незащищенного приложения), и она работает нормально. Тем не менее, я изо всех сил пытаюсь найти решение о том, как разрешить доступ к /graphiql, которое будет работать правильно, поскольку вызов для проверки схемы относится к маршруту /graphql, который я заблокировал, так как это маршрут, по которому все мои вызовы данных передаются преобразователям.
Я попробовал пару разных фильтров и применил их к цепочке фильтров безопасности вот так..

Код: Выделить всё

.addFilterBefore(new IntrospectionQueryFilter(), usernamePasswordAuthenticationFilter.class)

Код: Выделить всё

public class IntrospectionQueryFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {
// No initialization needed
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;

final var method = httpRequest.getMethod();
final var uri = httpRequest.getRequestURI();

if (isIntrospectionQuery(httpRequest)) {
chain.doFilter(request, response);
} else {
// Proceed to authentication
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
}
}

private boolean isIntrospectionQuery(HttpServletRequest request) throws IOException {
final var method = request.getMethod();
final var uri = request.getRequestURI();
if (uri.equals("/graphiql") || uri.equals("/favicon.ico")) {
return true;
}
if ("POST".equalsIgnoreCase(request.getMethod()) && "/graphql".equalsIgnoreCase(request.getRequestURI())) {
BufferedReader reader = request.getReader();
StringBuilder body = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
body.append(line);
}
return body.toString().contains("\"operationName\":\"IntrospectionQuery\"");
}
return false;
}

@Override
public void destroy() {
// No resources to clean up
}
}
Но, похоже, это не работает. Я не могу найти способ настроить вызов самоанализа так, чтобы он находился на незащищенном маршруте, отличном от /graphql.

Подробнее здесь: https://stackoverflow.com/questions/788 ... t-security
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»