Spring @ComponentScan排除/包含过滤器 - java

作为Spring MVC应用程序中的一个好习惯,Web配置应仅选择“前端”组件,例如@Controller@RestController
其他所有bean应该由Root应用程序上下文拾取。

我已经定义了以下Web配置(请记住,我不需要@EnableMvc注释,因为它扩展了WebMvcConfigurationSupport)

@Configuration
@ComponentScan(
        basePackages = { ... },
        useDefaultFilters = false,
        includeFilters = @Filter({
                Controller.class,
                ControllerAdvice.class}))

和Root配置如下。

@Configuration
@ComponentScan(
        basePackages = { ... },
        excludeFilters = @Filter({
                Controller.class,
                ControllerAdvice.class}))

我定义了两个@RestControllerAdvice类,第一个捕获所有通用的Exception,第二个捕获更具体的ServiceException

抛出ServiceException时,从不调用特定顾问,而是仅选择通用顾问。两种配置类中的基本软件包都相同。

我是否还需要在排除和包含过滤器上指定RestControllerAdvice?还是我想念其他东西?

编辑:

两种@RestControllerAdvice都没有basePackeges或任何特定条件。
并实际上找到并注册了ServiceException 1。

如果我将异常处理程序移至工作处理程序,则它将被调用。
这就是我的工作方式。如果将ServiceException处理程序移到单独的类中,则不再调用它。

@RestControllerAdvice
public class GlobalRestControllerAdviser extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleBindException(
            final BindException ex,
            final HttpHeaders headers,
            final HttpStatus status,
            final WebRequest request) {
        return new ResponseEntity<Object>(
                buildPresentableError(ex.getAllErrors().get(0)),
                HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(ServiceException.class)
    protected Response<?> handleServiceException(final ServiceException e) {
        ...
    }

    @ExceptionHandler(Exception.class)
    protected ResponseEntity<Object> handleGenericException(final Exception ex) {
        ...
    }
}

似乎最通用的ExceptionHandler覆盖了更具体的ojit_code。

参考方案

几乎在那儿,使用 FilterType type 并分离过滤器。

@Configuration
@ComponentScan(
    basePackages = { ... },
    excludeFilters = {
        @ComponentScan.Filter(type=FilterType.ANNOTATION, value=Controller.class),
        @ComponentScan.Filter(type=FilterType.ANNOTATION, value=ControllerAdvice.class)
    }
)

另外,我建议您创建一个自定义注释(例如@FrontEnd)并将过滤器应用于该注释。

Spring MVC Web应用程序检测暴力攻击的最佳方法? - java

Spring 3.0 MVC中是否有专门用于帮助检测Web应用程序的身份验证/登录页面上的蛮力攻击的功能? 参考方案 经过长期验证的实践是,如果身份验证失败,则会引入随机但相当大的延迟。这样,合法用户将立即登录,但攻击者每次尝试将花费500ms-1s,这使整个暴力概念不切实际(将永远存在)。合法用户偶尔失败的登录只会使他们稍有延迟,并且不会引起注意。如果需要…

Spring MVC中的输入验证 - java

我知道Commons Validator框架是Struts项目在服务器端和客户端验证输入值的事实上的标准。Spring MVC项目是否也是如此?我得到的印象可能不是,大多数Struts书籍和论坛都谈论Commons Validator框架,但是只有少数Spring书籍和论坛可以。在Spring MVC项目中验证输入的最佳实践是什么?干杯! 参考方案 在引入S…

Spring MVC:如何获取请求的处理程序方法 - java

我正在尝试根据Spring @RequestMapping注释方法上存在的注释实现一些逻辑。因此,我的方法中有一个HttpServletRequest实例,我想问一下spring“给我一个方法,该方法将被调用以处理此请求”,因此我可以使用反射API来询问是否存在我的注释,因此我可以更改处理。有什么简单的方法可以从Spring MVC获取此信息? java大神…

运行项目后无法在IntelliJ中打开静态页面(Spring MVC) - java

首先,我可以像这样通过intellij按钮查看htmlenter image description here然后当我单击按钮intellij显示浏览器错误enter image description here然后我运行tomcat,然后单击浏览器按钮enter image description here我是一个初学者,我不知道为什么会发生 参考方案 您…

Spring MVC-休息控制器响应类型为空时自动返回204 - java

我试图让当控制器方法响应类型为void时spring自动返回HTTP Status 204。例如:假设我有一个像这样的控制器方法:@DeleteMapping(value = "/{heroId}") public void delete(@PathVariable Long heroId) { heroService.delete(he…