SpringBoot Shiroログイン成功後jsonデータに戻るshiro ajaxでログイン
3208 ワード
古いルールで、まずコードをつけます.
注意:onLoginSuccessはユーザーのセッションをidはheadに書き込みset-cookieを行うが、ネットワーク上ではresponse.reset()が多く使われている.ヘッダ情報を空にすると、セッションの書き込みに失敗した後、フロントにログインできません.
一、ログインフィルタクラスの定義
二、shiro配置登録フィルタ
注意:ここで構成した後、loginのpostログインはまずこのフィルタに入ってエラーを報告してからcontrollerを歩き続け、ログインに成功したら直接負けます.
protected boolean onLoginSuccess(AuthenticationToken token, Subject subject,
ServletRequest request, ServletResponse response) throws Exception {
//WebUtils.redirectToSavedRequest(request, response, JSON.toJSONString(ResultUtil.success()));
// response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().print(JSON.toJSONString(ResultUtil.success()));
return false;
}
注意:onLoginSuccessはユーザーのセッションをidはheadに書き込みset-cookieを行うが、ネットワーク上ではresponse.reset()が多く使われている.ヘッダ情報を空にすると、セッションの書き込みに失敗した後、フロントにログインできません.
一、ログインフィルタクラスの定義
:SunckFormAuthenticationFilter FormAuthenticationFilter
/**
* ( )
*
* @author LengChen
* @version 1.0
* @date 2020/8/18
*/
public class SunckFormAuthenticationFilter extends FormAuthenticationFilter {
/**
*
* @param request
* @param response
* @throws Exception
*/
protected boolean onLoginSuccess(AuthenticationToken token, Subject subject,
ServletRequest request, ServletResponse response) throws Exception {
//WebUtils.redirectToSavedRequest(request, response, JSON.toJSONString(ResultUtil.success()));
// response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().print(JSON.toJSONString(ResultUtil.success()));
return false;
}
/**
*
*
*/
protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e,
ServletRequest request, ServletResponse response) {
String className = e.getClass().getName(), message = "";
System.out.println(className);
if (IncorrectCredentialsException.class.getName().equals(className) || AuthenticationException.class.getName().equals(className)
|| UnknownAccountException.class.getName().equals(className)){
if(!"-1".equals(StringUtils.isNumeric(e.getMessage()))){
message = e.getMessage();
}else{
message = ResultEnum.SHIRO_ERROR_4.getStringCode();
}
}
else if (StringUtils.isNotBlank(e.getMessage())) {
message = e.getMessage();
}
else{
message = ResultEnum.UNKNOWN_ERROR.getStringCode();
e.printStackTrace(); //
}
request.setAttribute(getFailureKeyAttribute(), className);
request.setAttribute(Global.DEFAULT_MESSAGE_PARAM, message);
return true;
}
}
二、shiro配置登録フィルタ
shiroFilterChainDefinitions.put("/login", "authc");
//
Map filters = shiroFilterFactoryBean.getFilters();
filters.put("authc", new SunckFormAuthenticationFilter());
注意:ここで構成した後、loginのpostログインはまずこのフィルタに入ってエラーを報告してからcontrollerを歩き続け、ログインに成功したら直接負けます.