Коды исключений или ошибок Spring Security Seprate для hasRole и isAuthenticated в PreAuthorize - PullRequest
0 голосов
/ 01 ноября 2019

Я использую preAuthorize в коде контроллера, в котором есть метод isAuthenticated () и hasAnyRole (). Проблема заключается в том, что оба эти метода возвращают AccessDeniedException. Я хочу использовать отдельный код ошибки или то же исключение другой код ошибки. Как для isAuthenticated use 401 и для roleBased error 403.

Я пробовал несколько вещей, например, пользовательский AccessDeniedHandler, но он не работал.

Следующий код, который я использовал:

<sec:http auto-config='false' use-expressions="true" disable-url-rewriting="true" entry-point-ref="http401UnauthorizedEntryPoint">
        <sec:headers disabled="true"/>
        <sec:csrf disabled="true"/>
        <sec:anonymous/>       
        <sec:session-management session-fixation-protection="newSession"/>
        <sec:custom-filter ref="standardUsernamePasswordAuthFilter" position="FORM_LOGIN_FILTER" />
        standardUsernamePasswordAuthFilter filter -->
        <sec:custom-filter ref="sessionProtectionFilter" before="SESSION_MANAGEMENT_FILTER"/>
        <sec:logout invalidate-session="true" logout-url="/logout" success-handler-ref="http200LogoutSuccessHandler"/>
    </sec:http> 



public class Http401UnauthorizedEntryPoint implements AuthenticationEntryPoint {
    private static final Log logger = LogFactory.getLog(Http401UnauthorizedEntryPoint.class);

    /**
     * Always returns a 401 error code to the client.
     */
    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException arg2) throws IOException, ServletException {
        logger.trace("Pre-authenticated entry point called. Rejecting access");        
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
    }
}

Ниже приведен код AccessDeniedHandler:

public class CustomAccessDeniedHandler  implements AccessDeniedHandler {

    @Override
    public void handle(HttpServletRequest request,HttpServletResponse response,AccessDeniedException exc) 
            throws IOException, ServletException {

        System.out.println("AccessDeniedException=="+exc.getMessage());

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        System.out.println("auth=="+auth);
        if (auth != null) {
            System.out.println("User: " + auth.getName() 
              + " attempted to access the protected URL: "
              + request.getRequestURI());
        }

        response.sendError(HttpServletResponse.SC_FORBIDDEN, "Unauthorized");
    }

}

And entries in xml for this:
 <bean id="custom403" class="com.security.CustomAccessDeniedHandler" />

 <sec:access-denied-handler ref="custom403"/>```



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