Аннотации PreAuthorize отправляют HTTP 404 вместо HTTP 401 в случае ошибки проверки

У меня есть фрагмент кода для отображения страницы входа в систему в зависимости от того, вошел ли пользователь в систему или нет

@PropertySource(value = "classpath:securityConfig.properties", ignoreResourceNotFound = true)
@Controller
public class IndexController {
    private static final String LOGIN_PAGE           = "login";
    private static final String HOME_PAGE            = "home";
    private static final String LOBBY_PAGE           = "lobby";
    private static final String FORGOT_USER_PAGE     = "forgotUserName";
    private static final String FORGOT_PASSWORD_PAGE = "forgotPassWord";

    @Value("${auth.mode:fixed}")
    private String authenticationMode;

    public String getAuthenticationMode(){
         return this.authenticationMode;
    }

    @PreAuthorize("isAnonymous() AND this.getAuthenticationMode().equals(\"fixed\")")
    @RequestMapping(method = RequestMethod.GET, value = { "/login" })
    public String getIndexPage() {
        return LOGIN_PAGE;
    }

}

Аннотация @PreAuthorize выдает HTTP 401, если условие не выполняется. Как мне вместо этого использовать HTTP 404? Я просто хочу выбросить 404 ТОЛЬКО для этого конкретного метода.

stackoverflow.com/a/42843551/4725592
Harshit 07.05.2018 12:07

@HarshitShrivastava Мне просто нужно было преобразовать 401 в 404 только для этого конкретного метода. Как я могу использовать отражения для определения класса и метода, а затем их отправки?

Prateek Narendra 07.05.2018 12:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
2
246
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы просто не определите контроллер, вы получите 404 Not Found. Это может быть достигнуто с помощью аннотации @ConditionalOnProperty на контроллере.

См. Мой предыдущий ответ https://stackoverflow.com/a/50211750/134894

У меня не может быть аннотации @ConditionalOnProperty на уровне класса. Мне это просто нужно для метода

Prateek Narendra 07.05.2018 14:36

Почему нет? Если вы говорите это, потому что хотите иметь другие обработчики, просто поместите обработчик входа в систему в отдельном классе контроллера от других обработчиков, которые вы хотите включить.

ptomli 07.05.2018 16:06

Другие вопросы по теме