gpt4 book ai didi

登录和注销后,Spring Security 重定向回引用 URL

转载 作者:行者123 更新时间:2023-12-04 23:42:39 29 4
gpt4 key购买 nike

我正在使用 Spring Security 进行身份验证。登录和注销按钮放置在页面布局上,供所有页面使用。我有一个 BookController,它需要一个用于创建操作的参数(例如,图像 ID):

class BookController {

@Secured("ROLE_USER")
def create() {
def someImage = params.imageId
...
}
@Secured("ROLE_USER")
def show() {
...
}
...
}

我的登录 Controller 是:

class LoginController {
...
def auth() {
...
redirect uri: SpringSecurityUtils.securityConfig.successHandler.defaultTargetUrl
}
...
}

这将在登录成功后将用户重定向到基本 URL。我想让用户始终被重定向到引用 URL,这是他成功登录之前的 URL。

例如:用户未登录。他在家/index 并想访问 book/create,这仅对登录用户可用。在这种情况下,Spring Security 会将用户重定向到 login/auth 和(在他成功登录后)到/(这是基本 URL)。

我想让重定向转到用户一直试图访问的 URL,在本例中是 book/create。任何其他操作也应如此。如果 home/index 上的未登录用户尝试访问 book/show/32333,他将被重定向到 login/auth,并在成功登录后返回 book/show/32333。

我该如何实现?

最佳答案

我有以下解决方案:

        HttpSession session = request.getSession(false)
def referUrl
def referParamsMap
def referParams = "?"
if(session != null) {
SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response)
if(savedRequest != null) {
referUrl = savedRequest.getRedirectUrl()
referParamsMap = savedRequest.getParameterMap()
referParamsMap.each { referParams += "${it.key}=${it.value[0]}&" }
}
}
println "referUrl "+referUrl+referParams
if(referUrl != null)
redirect url: referUrl+referParams
else
redirect uri: SpringSecurityUtils.securityConfig.successHandler.defaultTargetUrl

唯一的问题是,如果一个未登录的用户在页面上并登录(通过在布局 GSP 上单击登录链接),他将始终被重定向到 defaultTargetUrl 而不是他之前去过的页面.

在这种情况下有没有办法获得正确的 url?

关于登录和注销后,Spring Security 重定向回引用 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13351347/

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