我已经登录了浏览器用户登录的工作:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().cors()
.and().authorizeRequests()
.antMatchers("/api/**").authenticated()
.anyRequest().permitAll()
.and().formLogin().loginPage("/login").failureUrl("/login?error")
.usernameParameter("username").passwordParameter("password")
.successHandler(loginSuccessConfig)
.failureHandler(loginFailureConfig)
.and().logout().logoutUrl("/logout")
.logoutSuccessHandler(logoutSuccessConfig)
.logoutSuccessUrl("/index");
}
但我确实喜欢通过AJAX和响应JSON进行另一种登录,而不是重定向到另一个页面。 我是否知道有可能有另一个登录路径“/ api / login”,因为successHandler和failureHandler无法区分应该提供哪些响应,因为没有某种指示符可以这样做。
希望有人可以为此提供指导。 感谢。
答案 0 :(得分:0)
只需在登录表单或Ajax
中提交其他参数即可<input type="hidden" name="responseJson" value="true"/>
然后,在扩展&#34; SimpleUrlAuthenticationFailureHandler&#34; class(任何其他你喜欢的),内部覆盖&#34; onAuthenticationFailure&#34;方法,这个方法得到了param调用&#34; HttpServletRequest&#34;,检查如下:
String responseJson = request.getParameter("responseJson");
if (responseJson != null && responseJson.equals("true")){
response.setContentType("text/json");
PrintWriter out = response.getWriter();
out.print(jsonObjectAboutFailLogin.toString());
out.flush();
}