首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring安全配置2种登录行为- ajax响应JSON &表单登录重定向新页面

Spring安全配置2种登录行为- ajax响应JSON &表单登录重定向新页面
EN

Stack Overflow用户
提问于 2017-06-19 03:15:01
回答 1查看 58关注 0票数 0

我有表单登录为浏览器用户登录的工作:

代码语言:javascript
运行
复制
@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不能区分应该提供什么响应,因为没有某种指示符可以这样做。

希望有人能在这方面有所指导。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-19 04:30:23

只需想一想,只需在登录表单或Ajax中提交附加参数就可以进行黑客攻击。

代码语言:javascript
运行
复制
<input type="hidden" name="responseJson" value="true"/>

然后,在扩展"SimpleUrlAuthenticationFailureHandler“类(任意其他类),在重写"onAuthenticationFailure”方法中,该方法得到param调用"HttpServletRequest",检查如下:

代码语言:javascript
运行
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44621753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档