SpringBoot 2.2 все еще показывает ошибку белой метки при запросе "/*.jsp" - PullRequest
1 голос
/ 08 апреля 2020

У меня есть веб-проект Spring boot 2.2 с jsp

@Configuration
@EnableWebMvc
@Slf4j
public class WebConfig implements WebMvcConfigurer {


    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("language");
        return localeChangeInterceptor;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasenames("classpath:i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

    @Bean
    public LocalValidatorFactoryBean getValidator() {
        LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
        bean.setValidationMessageSource(messageSource());
        return bean;
    }

    @Bean
    public ViewResolver jspViewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

}

application.properties

spring.mvc.throw-exception-if-no-handler-found = true

GlobalExceptionHandler. java

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    public static final String DEFAULT_ERROR_VIEW = "error/error";
    public static final String PAGE_NOT_FOUND_ERROR_VIEW = "error/404";


    @ExceptionHandler(NoHandlerFoundException.class)
    public ModelAndView pageNotFoundErrorHandler(HttpServletRequest req, Exception e) {
        if (log.isDebugEnabled()) {
            log.debug("The page [{}] does not exist : {}", req.getRequestURI(), e.getMessage());
        }
        return getMAV(req, e, HttpStatus.NOT_FOUND, PAGE_NOT_FOUND_ERROR_VIEW);
    }


    private ModelAndView getMAV(HttpServletRequest req, Exception e, HttpStatus status, String viewName) {
        ModelAndView mav = new ModelAndView();
        mav.addObject("error", status.getReasonPhrase());
        mav.addObject("exception", e.getMessage());
        mav.addObject("url", req.getRequestURL());
        mav.setStatus(status);
        mav.setViewName(viewName);
        return mav;
    }
}

это работает, когда я go localhost: 8080 / notMapped показывает мою страницу ошибки, но если я go I go localhost: 8080 / notMapped. jsp it показывает ошибку White Label, которую я пытался удалить

@SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class})

не работает (показывает tomcat 404) ...

пытался поставить

@Configuration
@EnableWebSecurity
@Slf4j
public class WebSecurity extends WebSecurityConfigurerAdapter {

    @Bean
    public AccessDeniedHandler accessDeniedHandler(){
        return new ApplicationAccessDeniedHandler();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        log.info("Overriding default configure to bypass default login");
        **http
                .authorizeRequests()
                .antMatchers("/*.jsp")
                .denyAll();**

        http
                .authorizeRequests()
                .anyRequest()
                .permitAll();

        http
                .headers()
                .frameOptions()
                .sameOrigin();
    }

}

только код ошибки в белая метка изменена (404 -> 403)

1 Ответ

0 голосов
/ 08 апреля 2020

удалено

@EnableWebMvc

и оно показывает мои 404. jsp

, но я вижу, что оно все еще использует ErrorMvcAutoConfiguration

...