我有表单登录为浏览器用户登录的工作:
@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不能区分应该提供什么响应,因为没有某种指示符可以这样做。
希望有人能在这方面有所指导。谢谢。
发布于 2017-06-19 04:30:23
只需想一想,只需在登录表单或Ajax中提交附加参数就可以进行黑客攻击。
<input type="hidden" name="responseJson" value="true"/>
然后,在扩展"SimpleUrlAuthenticationFailureHandler“类(任意其他类),在重写"onAuthenticationFailure”方法中,该方法得到param调用"HttpServletRequest",检查如下:
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();
}
https://stackoverflow.com/questions/44621753
复制相似问题