2017-05-05 3 views
-1

私はPOSTデータJSONにアクセスする必要のあるアプリケーションで作業しています。私のコードは、私がアプリケーションSpring SecurityのカスタムフィルターでPOSTデータにアクセスできない

$ curl -v -X POST -H "Content-Type: application/json" -d '{"idToken" : "[email protected]#[email protected]#23434W$"}' http://localhost:8080/login 

を実行したときに、私は私が何をしないのですnull

ログの
2017-05-06 06:23:31.153 INFO 89727 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization completed in 2 ms 
filtered /login request: null 

を取得

import java.io.IOException; 
import javax.servlet.FilterChain; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import org.springframework.web.filter.GenericFilterBean; 

public class LoginFilter extends GenericFilterBean { 

    @Override 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 
     FilterChain filterChain) throws IOException, ServletException { 

    System.out.println("filtered /login request: " + servletRequest.getParameter("idToken")); 
    filterChain.doFilter(servletRequest, servletResponse); 
    } 
} 

のですか?

+2

'ServletRequest.getParameter(...)'はリクエストパラメータのみを取得します。あなたはおそらく自分自身を解読する必要があります(例えばjacksonを使用して) – Riiverside

+0

それ以外にも、ログインを扱うフィルタを作るのはなぜですか?通常のエンドポイントはこのimoにもっと適しています。 – Riiverside

+0

@Riiverside、春になると、セキュリティはほとんどの場合、フィルタによって処理されます。ログインとログアウトを含む。 – hooknc

答えて

0

jsonをparamとしてではなくリクエストボディとして渡しています。このように読んでみてください。

servletRequest.getReader().lines().collect(Collectors.joining(System.lineSeparator())); 

しかし、servletRequest.getReader()は一度だけ読み取ることができるリーダーを返します。

関連する問題