1. 返回JSON
为什么要返回JSON
前后端分离成为企业应用开发中的主流,前后端分离通过json进行交互,登录成功和失败后不用页面跳转,而是给前端返回一段JSON提示, 前端根据JSON提示构建页面.
需求: 对于登录的各种状态 , 给前端返回JSON数据
1.1 在vo包下创建一个HttpResult对象, 存储返回的信息
vo即 value object值对象, 所有不存储在数据库中的对象就放在vo包下
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class HttpResult {private Integer code;private String msg;private Object data;public HttpResult(Integer code, String msg) {this.code = code;this.msg = msg;}
}
1.2 创建认证(登录)成功处理器AuthenticationSuccessHandler
当且仅当认证(登录)成功后, 该处理器开始工作, 给前端返回一个JSON
@Component
public class MyAuthenticationSuccessHandle implements AuthenticationSuccessHandler {//注入一个序列化器, 可以将JSON序列化, 反序列化@Resourceprivate ObjectMapper objectMapper;@Overridepublic void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {response.setCharacterEncoding("UTF-8");response.setContentType("application/json;charset=utf-8");//借助Lombok实现建造者模式, 并通过建造者模式创建对象HttpResult httpResult = HttpResult.builder().code(1).msg("登陆成功").build();//将对象转化为JSONString responseJson = objectMapper.writeValueAsString(httpResult);PrintWriter writer = response.getWriter();writer.println(responseJson);}
}
在安全配置类中注入登录成功处理器
@Configuration
public class MySSWebSecurityConfig extends WebSecurityConfigurerAdapter {// 注入登陆成功的处理器@Autowiredprivate MyAuthenticationSuccessHandle successHandler;}