【发布时间】:2016-07-31 18:50:18
【问题描述】:
我对 Spring 安全性有点陌生,需要帮助来禁用 http 方法,例如 OPTIONS、PUT 或 DELETE。
【问题讨论】:
标签: spring-mvc spring-security
我对 Spring 安全性有点陌生,需要帮助来禁用 http 方法,例如 OPTIONS、PUT 或 DELETE。
【问题讨论】:
标签: spring-mvc spring-security
Spring拦截器url提供了一个方法参数,缩小的地方是它只允许指定一个方法。
您可以通过为同一模式指定几个拦截器 URL 项来克服这个问题
<http auto-config="true" use-expressions="true" >
<intercept-url pattern="/login " access="permitAll" />
<intercept-url pattern="/**" access=" hasRole('ROLE_ADMIN')" method="GET" />
<intercept-url pattern="/**" access=" hasRole('ROLE_ADMIN')" method="POST" />
</http>
另一种选择是编写自己的 spring-security-expression 例如isPermitedMethod 以下blog 可能会有所帮助。
【讨论】:
<intercept-url pattern="/** " access="denyAll" /> 就足够了
为什么你没有一个只允许 GET 的控制器方法?任何其他 HTTP 方法都将被自动拒绝。
@Controller
@RequestMapping("/releaseupdates")
public class ReleaseUpdateController {
@RequestMapping(method=RequestMethod.GET)
public String getRequest() {
//do something, only accepts GET
}
}
如果您想允许其他方法但只允许特定用户/角色,那么您可以通过类似的方式配置这些细粒度设置:https://www.mkyong.com/spring-security/spring-security-custom-login-form-annotation-example/
【讨论】: