gpt4 book ai didi

java - 如何允许未经身份验证的 GET 请求但保护其他 HTTP 方法?

转载 作者:行者123 更新时间:2023-12-02 04:36:49 25 4
gpt4 key购买 nike

我已经使用 spring roo 创建了一个 Web 服务,并向该项目添加了 spring security。到目前为止,一切工作正常,但现在我想允许通过 HTTP GET 请求访问实体信息,而无需任何身份验证。其他 HTTP 方法(如 POST、PUT 等)应该保持安全。

我的 applicationContext-security.xml 如下所示,但是当我在“/releaseupdates/”上使用“Accept:application/json” header 执行 HTTP GET 时,它总是返回登录页面(我认为 spring 安全性重定向到内部登录页面):

 <http auto-config="true" use-expressions="true">
<form-login login-processing-url="/resources/j_spring_security_check" login-page="/login" authentication-failure-url="/login?login_error=t" />
<logout logout-url="/resources/j_spring_security_logout" />
<!-- Configure these elements to secure URIs in your application -->
<intercept-url pattern="/releaseupdates/**" access="permitAll" method="GET" />
<intercept-url pattern="/releaseupdates/**" access="hasRole('ROLE_ADMIN')" method="POST" />
<intercept-url pattern="/releaseupdatestatuses/**" access="hasRole('ROLE_ADMIN')"/>
<intercept-url pattern="/choices/**" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/member/**" access="isAuthenticated()" />
<intercept-url pattern="/resources/**" access="permitAll" />
<intercept-url pattern="/login/**" access="permitAll" />
<intercept-url pattern="/**" access="isAuthenticated()" />
</http>

最佳答案

还有一个注释@PreAuthorize,它可能是你的 friend 。注释可以位于 Controller 的类或方法级别。

这是一个例子:

@Controller
@RequestMapping("/releaseupdates")
public class ReleaseUpdateController {

@RequestMapping(method=RequestMethod.GET)
public String unprotectedGetRequest() {
//do something, no protection
}

@PreAuthorize("hasRole('ROLE_ADMIN')")
@RequestMapping(method=RequestMethod.POST)
public String securePostRequest() {
//do something, secured
}

}

关于java - 如何允许未经身份验证的 GET 请求但保护其他 HTTP 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30643960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com