2017-03-01 48 views
-1

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

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

这是我试过的审核未认证的访问代码:

@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); 

回答

-2

要获取IP地址(至少最近代理的用户来自),使用:

req.getRemoteAddr() 

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

+0

我的问题不在于获取IP地址。请仔细阅读。 – AKJ88

+0

它无法访问登录页面吗?如果是,请“仔细阅读”我的答案的第二部分:“现在,如果用户未通过身份验证,则应将重定向发送到登录页面,而不是发生错误” – Boschi

+0

请在此处完整发布您的答案,而不是发布一条链接。 – AKJ88