2

私はSpring Security 3を使用しています。次の方法があります:

public class CustomUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
    @Override
    protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) throws IOException, ServletException {
        super.successfulAuthentication(request, response, authResult);
        UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) authResult;
        WebAuthenticationDetails details = (WebAuthenticationDetails) token.getDetails();
        String address = details.getRemoteAddress();
        System.out.println("Successful Login from remote address: "+ address);
    }

    @Override
    protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException {
        super.unsuccessfulAuthentication(request, response, failed);
        System.out.println("==failed login==");
    }
}

アドレス変数のボックス化を解除するための汚いコードはありますか? 短く、または適切に書くことができますか?

4

2 に答える 2

1

これはおそらくより良いでしょう:

String address = request.getRemoteAddr();
于 2011-09-14T11:50:04.597 に答える
1

正確には何を探していますか?その「アドレス」は、サービスを要求したもの/誰が要求したかの報告されたアドレスになりますが、なりすましの可能性があり、プロキシは自分自身を「リモート アドレス」として報告し、オプションで元の「リモート アドレス」を含む HTTP ヘッダーを含めます。慣例により、ヘッダーの名前は「X-FORWARDED-FOR」です。ただし、それは完全にプロキシとそれを構成した人次第です。

于 2011-09-14T11:48:06.603 に答える