【问题标题】:Audit unauthenticated accesses to REST APIs审核对 REST API 的未经身份验证的访问
【发布时间】:2017-07-20 13:59:11
【问题描述】:

我有一个完全在 spring 中编写的 RESTful 程序。我使用 spring security 来控制 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);

【问题讨论】:

    标签: java rest spring-security


    【解决方案1】:

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

    req.getRemoteAddr()
    

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

    【讨论】:

    • 我的问题不在于获取 IP 地址。请仔细阅读。
    • 是无法访问登录页面吗?如果是,“请仔细阅读”我回答的第二部分:“现在如果用户未通过身份验证,您应该发送重定向到登录页面,而不是错误”
    • 请在此处完整发布您的答案,而不是发布链接。
    • 您分配给登录页面的 URL 模式是什么?或者它是一个过滤器?如果没有这些信息,除了resp.sendRedirect("/your/login/page");,我无法为您提供代码示例
    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2016-11-04
    • 2019-01-29
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多