Spring Security 使用Ajax登陆无法跳转页面解决方法

使用Security的朋友都知道,使用Security后,不再需要我们自己过多的(还需要写少量代码)写登陆的逻辑,只需要自己在html的登陆表单上面定义好输入框name为:username和password,Security就可以收到账户和密码了。

如果我们采用Ajax登陆,正常来说Ajax需要判断服务器的状态码,根据状态码进一步操作。但是由于不再需要自己过多的登陆逻辑代码,从而在关于返回状态码的事情上有所忽略。

所以为了避免Ajax因为收不到服务器返回的状态码导致无法登陆,我们应该按照以下的方法进行操作。

  1. 实现Security登陆成功处理器org.springframework.security.web.authentication.AuthenticationSuccessHandler

  2. 重写它的默认处理方法onAuthenticationSuccess

  3. 在onAuthenticationSuccess方法的内部添加响应提的内容类型

    response.setContentType("application/json;charset=utf-8"8);
    

4.添加上响应的状态码

		private ObjectMapper mapper;
		// 添加一个map对象,方便等下转换成字符串
        Map json = new HashMap<String ,Object>();
        json.put("msg","成功");
        json.put("code",0);
        // 设置编码
        response.setContentType(FebsConstant.JSON_UTF8);
        // 这里是使用:jackon的jar包,转换成json对象并写入到响应体,
        response.getWriter().write(mapper.writeValueAsString(json));
  1. 你的浏览器就会收到服务器的json

原文地址:https://www.cnblogs.com/gobyte/p/10753475.html