2011-11-10 11 views
0

答えは私にとって意味をなさないことを除いて、私はここと同じ正確な質問をしています。スプリングセキュリティアクセス拒否ハンドラ

Spring Security Access Denied Handler - how do you determine what the URL was that the user tried to access?

私はこれを作成することによって、彼らは彼らの答えに言っていたものをフォローしようとした:

@RequestMapping("/invalidPermission") 
public void invalidPermission(HttpServletRequest request) { 
    System.out.println(request.getServletPath()); 
} 

しかし、request.getServletPath()が明らかに代わり、元のURL/invalidPermissionを出力します彼らはアクセスしようとした。

アイデア?

ありがとうございます!

アップデート:ここで作業コード、彼らはカスタムAccessDeniedHandlerのハンドル()メソッドではなく、コントローラのアクションを使用していたその答えに

<access-denied-handler ref="FooAccessDeniedHandler" /> 
<bean id="FooAccessDeniedHandler" 
    class="my.pkg.AccessDeniedExceptionHandler"> 
    <property name="errorPage" value="/path-to/custom403.jsp" /> 
</bean> 

package my.pkg.AccessDeniedExceptionHandler; 

import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.security.access.AccessDeniedException; 
import org.springframework.security.web.access.AccessDeniedHandler; 

public final class AccessDeniedExceptionHandler implements AccessDeniedHandler { 

    private String errorPage; 

    @Override 
    public void handle(final HttpServletRequest request, final HttpServletResponse response, final AccessDeniedException arg2) throws IOException, ServletException { 
     System.out.println(String.format("URL [%s] ", request.getServletPath())); 
     response.sendRedirect(getErrorPage()); 
    } 

    public String getErrorPage() { 
     return errorPage; 
    } 

    public void setErrorPage(String errorPage) { 
     this.errorPage = errorPage; 
    } 

}

答えて

関連する問題