2017-03-01 6 views
-1

私は春に完全に書かれたRESTfulプログラムを持っています。私は春のセキュリティを使って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() 

ここでユーザーがautheでない場合あなたはエラーの代わりにログインページにリダイレクトを送るべきです。 参照:http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#sendRedirect(java.lang.String)

+0

私の質問はIPアドレスを取得することではありません。注意深く読んでください。 – AKJ88

+0

ログインページにアクセスできませんか? 「はい」の場合、「慎重にお読みください」と答えてください。「ユーザーが認証されていない場合は、エラーの代わりにログインページにリダイレクトを送信する必要があります。 – Boschi

+0

投稿するのではなく、リンク。 – AKJ88

関連する問題