REST 控制器的 Spring 安全性
Posted
技术标签:
【中文标题】REST 控制器的 Spring 安全性【英文标题】:Spring security for REST controllers 【发布时间】:2015-07-02 22:22:19 【问题描述】:我正在为我的 REST 控制器和文档使用 Spring MVC 和 Spring security。我想保护三个不同的路径:
"/api/**" "/api-docs" “/api-documentation”显然,此代码仅适用于最后一个:“/api-documentation”。我也尝试过 antMatchers("/api/**","/api-docs","/api-documentation") 但我不知道如何正确配置它。有什么想法吗?
http
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(entryPoint())
.and()
.antMatcher("/api/**")
.antMatcher("/api-docs")
.antMatcher("/api-documentation")
.authorizeRequests()
.anyRequest().hasRole("REST")
.and()
.httpBasic();
【问题讨论】:
【参考方案1】:这里有一些路径匹配建议。
"/api/**"
将匹配 /api/x/y
等所有方法。
"/api-docs"
只会匹配 /api-docs
。同样/api-documentation
。
如果添加"/api-docs/*"
,它将映射/api-docs/x
。
这里是some useful resources 蚂蚁图案。
因此类似于,
http
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(entryPoint())
.and()
.antMatchers("/api/**","/api-docs","/api-documentation")
.authorizeRequests()
.anyRequest().hasRole("REST")
.and()
.httpBasic();
必须根据您的路径规范要求工作。
【讨论】:
谢谢,但 .antMatcher("/api/**","/api-docs","/api-documentation") 是无效操作。 嗨@maleenc,我想这不是语法问题。问题是我不能把这个操作放在那里。 (antMatchers)。谢谢,我会用这个:.antMatcher("/api*")【参考方案2】:对于这种情况,只需将 antmatcher 更改为 .antMatcher("/api*")
删除其他两个。
【讨论】:
【参考方案3】:你必须指定谁可以访问指定的路径:
.antMatchers("/api/**").permitAll()
.antMatchers("/api-docs").hasRole("ADMIN")
【讨论】:
谢谢,但这是我的问题。只有这三个路径需要使用角色“REST”进行身份验证 会说你需要对每个请求进行身份验证 anyRequest().authenticated() 并添加尝试为每个路径添加hasRole。以上是关于REST 控制器的 Spring 安全性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot Rest api 中创建安全登录控制器
Angular 2 + CORS + 带有 Spring Security 的 Spring Boot Rest Controller