Spring Security обработчик отказа в доступе - PullRequest
0 голосов
/ 10 ноября 2011

У меня тот же точный вопрос, что и здесь, за исключением того, что ответ для меня не имеет смысла.

Обработчик отказа в доступе Spring Security - как определить, какой URL был у пользователя?пытался получить доступ?

Я пытался следовать тому, что они говорили в своем ответе, создавая это:

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

Однако request.getServletPath (), очевидно, выведет /invalidPermission вместо исходного URL, к которому они пытались получить доступ.

Есть идеи?

Спасибо!

Обновление: вот рабочий код

<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;
    }

}

1 Ответ

2 голосов
/ 11 ноября 2011

В этом ответе они использовали метод handle () пользовательского AccessDeniedHandler, а не действия контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...