3

認証にSpring Securityを使用しています。ログインおよびログアウト ボタンは、すべてのページで使用されるページ レイアウトに配置されます。私は作成アクションのパラメーターを必要とする BookController を持っています (例: 画像 ID):

class BookController {

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

私のLoginControllerは次のとおりです。

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

これにより、ログインが成功した後、ユーザーはベース URL にリダイレクトされます。ユーザーが正常にログインする前の URL である参照 URL に常にリダイレクトされるようにしたいと考えています。

例: ユーザーはログインしていません。彼はホーム/インデックスにいて、ログインしたユーザーのみが利用できる book/create にアクセスしたいと考えています。この場合、Spring Security はユーザーを login/auth にリダイレクトし、(ユーザーが正常にログインした後) / (ベース URL) にリダイレクトします。

ユーザーがアクセスしようとしている URL (この場合は book/create) にリダイレクトする必要があります。これは、他のアクションにも当てはまります。ホーム/インデックスにログインしていないユーザーが book/show/32333 にアクセスしようとすると、ログイン/認証にリダイレクトされ、ログインに成功すると、book/show/32333 に戻ります。

どうすればそれを実装できますか?

4

1 に答える 1

0

私は次の解決策を持っていました:

        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を取得する方法はありますか?

于 2012-11-12T23:11:27.510 に答える