私はSpring 4でExtjs-6を使ってアプリケーションを開発しています。私のアプリケーションは安らかです。
私は次のようにCORS起源を有効にします。Ext.Ajaxを使用してセキュリティを強化するにはどうすればよいですか?
public class CorsFilter extends OncePerRequestFilter {
private static final String ORIGIN = "Origin";
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Max-Age", "10");
String reqHead = request.getHeader("Access-Control-Request-Headers");
if (!StringUtils.isEmpty(reqHead)) {
response.addHeader("Access-Control-Allow-Headers", reqHead);
}
if (request.getMethod().equals("OPTIONS")) {
try {
response.getWriter().print("OK");
response.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
} else{
filterChain.doFilter(request, response);
}
}
}
フィルターの設定:
<security:http use-expressions="true">
...
<sec:custom-filter ref="CorsFilter" before="HEADERS_FILTER"/>
</security:http>
とBean:
<bean id="CorsFilter" class="..." />
私はAJAX要求を持つユーザーのlogingにしたいです。私はAdvanced REST clientとhttp requesterを使ってajaxリクエストをテストします。拡張の結果は以下の通りです:
内線Ajaxリクエストコードは以下の通りです:
Ext.Ajax.request({
url: "http://localhost/Calk/j_spring_security_check",
// params: {
// "j_username": "ali",
// "j_password": "123456"
// },
params: "j_username=ali&j_password=123456",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
method: "POST",
success: function(){...},
failure: function(){...}
});
私がリクエストを送信すると、それは200 OK
を取得し、私はinitをクライアント側でアプリケーションを実行し、いくつかのデータを取得する要求を送信します。しかし、このすべての要求のサーバーは401 Unauthorized
になります。
問題点?
重要な更新:
Logining要求は以下の通りである:
Serverが応答にクッキーを設定し、に従うよう、許可取得のデータ要求は、次のとおりです。
なぜ?
'params:form.getValues()'を試しましたか? – qmateub
はい、結果は上記と同じです。 –
問題は、リクエストメソッド "OPTIONS"が使用され、認証に必要なパラメータがなくても常に送信されることです。 [その方法が使われている理由をここで確認](https://www.sencha.com/forum/showthread.php?95656-how-to-disable-Ajax.request-method-quot-OPTIONS-quot&p=452480&viewfull=1# post452480)。 – Alexander