小编MrN*_*NVK的帖子

Spring boot:如何在静态资源中添加拦截器?

我有几个文件夹,/static/img/**我需要为其中一些添加拦截器来检查用户权限.我之前使用过拦截器并以这种方式添加它们:

@SpringBootApplication
@EnableTransactionManagement
public class Application extends WebMvcConfigurerAdapter {

  ...

  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
      .addResourceHandler("/static/**")
      .addResourceLocations("classpath:/static/");
  }

  @Bean
  public AuthHeaderInterceptor authHeaderInterceptor() {
    return new AuthHeaderInterceptor();
  }

  @Bean
  public AuthCookieInterceptor authCookieInterceptor() {
    return new AuthCookieInterceptor();
  }

  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry
      .addInterceptor(authHeaderInterceptor())
      .addPathPatterns(REST_URL)
      .excludePathPatterns(
        new String[] {
          REST_SECURITY_URL,
          REST_SETTINGS_URL,
          REST_REPORTS_URL
        }
      );

    registry
      .addInterceptor(authCookieInterceptor())
      .addPathPatterns(REST_REPORTS_URL);
  }
}
Run Code Online (Sandbox Code Playgroud)

一切都适用于休息控制器及其URL,但现在我需要保护一些静态资源,我添加了这个:

@SpringBootApplication
@EnableTransactionManagement
public class Application extends WebMvcConfigurerAdapter {

  ...

  @Bean 
  public RoleAdminInterceptor roleAdminInterceptor() {
    return new …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

8
推荐指数
1
解决办法
1122
查看次数

Spring Boot:如何匹配所有路由?

我正在开发一个简单的网络应用程序Spring boot 1.5.3,我需要所有路由来发送静态index.html文件。现在,我有这个:

@Controller
public class IndexController {

    @RequestMapping("/*")
    public String index(final HttpServletRequest request) {
        final String url = request.getRequestURI();

        if (url.startsWith("/static")) {
            return String.format("forward:/%s", url);
        }

        return "forward:/static/index.html";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序仅包含静态资产和 REST API。但问题是上面显示的控制器只匹配第一级 url /index,如/department等。我想匹配所有 url 级别,如/index/some/other/staff等。我该怎么做?

附言。我尝试使用/**中的模板@RequestMapping,但我的应用程序因错误而中断StackOverflow

更新

如果在 url 中再添加一级,那么所有内容都会按预期工作:

@Controller
public class IndexController {

    @RequestMapping("/test/**")
    public String index(final HttpServletRequest request) {
        final String url = request.getRequestURI();

        if (url.startsWith("/static")) {
            return String.format("forward:/%s", …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

5
推荐指数
2
解决办法
7686
查看次数

如何验证 REST 服务中的通用 bean?

在我当前的项目中,我经常使用批量请求。我有简单的BulkRequest<T>课程:

import java.util.List;

import javax.validation.constraints.NotNull;

public class BulkRequest<T> {

    @NotNull private List<T> requests;

    public List<T> getRequests() { return this.requests; }

    public void setRequests(List<T> requests) { this.requests = requests; }
}
Run Code Online (Sandbox Code Playgroud)

与其他 bean 一起使用非常简单,例如:

@RequestMapping(value = "/departments/{departmentId}/patterns",
                method = RequestMethod.POST,
                produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> post(
  final @PathVariable long departmentId,
  final @Valid @RequestBody BulkRequest<AddPatternRequest> bulkRequest
) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

AddPatternRequest 包含自己的验证规则,只代表一个请求,可以收集成批量请求:

import javax.validation.constraints.NotNull;

public class AddPatternRequest {

  @NotNull private Long pattern;

  public Long getPattern() { return this.pattern; }

  public …
Run Code Online (Sandbox Code Playgroud)

java validation spring spring-boot

0
推荐指数
1
解决办法
795
查看次数

标签 统计

java ×3

spring ×3

spring-boot ×3

validation ×1