审核对REST API的未经身份验证的访问

时间:2017-03-01 09:48:25

标签: java rest spring-security

我有一个完全在春天写的RESTful程序。我使用spring安全性来控制REST调用并扩展AccessDeniedHandlerImpl来审计未经授权的访问。现在我还想审核来自未经身份验证的用户的请求并记录他们的IP地址(我们唯一拥有的,因为他们的用户名是匿名的)。我尝试使用AuthenticationEntryPoint,但它无法正常工作并阻止重定向到登录页面(审核部分可以正常工作,但我无法访问我的登录页面并像以前一样使用我的程序)。

实现此行为的正确方法是什么?我是否需要实现表单登录并进行审计?他们是一个简单的监听器或类似的东西,用于在我的代码中添加日志记录并向用户显示登录页面吗?

这是我尝试审核未经身份验证的访问的代码:

@Component
public class MyAuthEntry implements AuthenticationEntryPoint{
    @Override
    public void commence(HttpServletRequest req, HttpServletResponse resp, AuthenticationException e) throws IOException, ServletException {
        //log user ip and uri they tried accessing 
        resp.sendError(401, e.getMessage());
    }
}

我还在WebSecurityConfig中注册了这个实现:

http
 .exceptionHandling().authenticationEntryPoint(myAuthEntry);

1 个答案:

答案 0 :(得分:-2)

要获取IP地址(至少是用户来自的最后一个代理),请使用:

req.getRemoteAddr()

现在,如果用户未经过身份验证,您应该将重定向发送到登录页面,而不是错误。 请参阅:http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#sendRedirect(java.lang.String)