ExtJS をフロントエンドとして Spring security 3.1 を使用しています。これが私の security-config.xml ファイルです。
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/login.html" access="permitAll()" />
<security:intercept-url pattern="/**.html" access="isAuthenticated()" />
<security:form-login login-page="/login.html"
authentication-failure-url="/login.html"
default-target-url="/index.html" always-use-default-target="true"/>
<security:logout/>
</security:http>
私のExtJS 4.0ログインコントローラー。
doLogin: function(formItem) {
var loadingMask = new Ext.LoadMask(Ext.getBody(), {msg:"Logging in..."});
loadingMask.show();
var lp = formItem.up('loginpanel');
var form = lp.getForm();
console.log(form);
form.submit({
clientValidation: true,
method: 'POST',
url: "j_spring_security_check",
/*
params: {
newStatus: 'delivered'
},
*/
success: function() {
loadingMask.destroy();
window.location = '/index.html';
Ext.Msg.alert('Success', action.result.msg);
},
failure: function(form, action) {
form.reset();
loadingMask.destroy();
switch (action.failureType) {
case Ext.form.action.Action.CLIENT_INVALID:
Ext.Msg.alert('Failure', 'Form fields may not be submitted with invalid values');
break;
case Ext.form.action.Action.CONNECT_FAILURE:
Ext.Msg.alert('Failure', 'Ajax communication failed');
break;
case Ext.form.action.Action.SERVER_INVALID:
Ext.Msg.alert('Failure', action.result.msg);
}
}
});
私のSpringログインコントローラー。
public class LoginController {
private static final Logger logger = LoggerFactory.getLogger(LoginController.class);
@RequestMapping(value = "/login.html", method = RequestMethod.GET)
public String login(Model model, @RequestParam(required=false) String message) {
model.addAttribute("message", message);
return "login";
}
ログイン ボタン フォームをクリックすると、index.html にリダイレクトされますが、ExtJs の index.html は JSON 文字列 true または false を想定しており、JSON エラーがスローされます。
Uncaught You're trying to decode an invalid JSON String:
AuthenticationProcessingFilter が削除されたことを知りました。ここで、ログイン コントローラーを介して成功の真の文字列を返す必要があります。助けていただければ幸いです。