У меня есть фрагмент кода для отображения страницы входа в систему в зависимости от того, вошел ли пользователь в систему или нет
@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 ТОЛЬКО для этого конкретного метода.
@HarshitShrivastava Мне просто нужно было преобразовать 401 в 404 только для этого конкретного метода. Как я могу использовать отражения для определения класса и метода, а затем их отправки?




Если вы просто не определите контроллер, вы получите 404 Not Found. Это может быть достигнуто с помощью аннотации @ConditionalOnProperty на контроллере.
См. Мой предыдущий ответ https://stackoverflow.com/a/50211750/134894
У меня не может быть аннотации @ConditionalOnProperty на уровне класса. Мне это просто нужно для метода
Почему нет? Если вы говорите это, потому что хотите иметь другие обработчики, просто поместите обработчик входа в систему в отдельном классе контроллера от других обработчиков, которые вы хотите включить.