Spring安全失败在Heroku环境中被覆盖

时间:2017-06-11 13:43:35

标签: java spring spring-mvc heroku

我有一个使用Spring Security 3.2.9的Spring MVC Java应用程序。该应用程序使用Java配置进行安全配置,本地登录/身份验证过程正常。

但是,当应用程序在我们的Heroku dev环境中运行时,登录失败并未到达正确的URL。我可以在日志中看到正在对正确的URL进行GET调用,“/ signin?error = 1”,但是对“/”的额外调用似乎正在劫持它并重定向到主URL“/”。

安全配置为:

@Override protected void configure(HttpSecurity http) throws Exception { http
.authorizeRequests() .antMatchers("/", "/signin**", "/resources/**", "/signup").permitAll() .anyRequest().authenticated() .and() .formLogin() .failureUrl("/signin?error=1") .loginPage("/signin") .permitAll() .loginProcessingUrl("/authenticate") .and() .logout() .logoutUrl("/logout") .permitAll() .logoutSuccessUrl("/signin") .and() .rememberMe() .rememberMeServices(rememberMeServices()) .key("remember-me-key") ; }

在Heroku日志中,我看到对“/ authenticate”的调用,对“/ signin?error = 1”的调用,以及对“/”的调用。这些出现在日志中的顺序不一致,因此它不一定是一系列事件。

Jun 11 06:25:54 myapp-dev heroku/router: at=info method=POST path="/authenticate" host=myapp-dev.herokuapp.com request_id=25cfa779-67ab-4bb4-a036-d25ad3e893cb fwd="109.159.48.152" dyno=web.1 connect=0ms service=11ms status=302 bytes=465 protocol=https Jun 11 06:25:54 myapp-dev heroku/router: at=info method=GET path="/signin?error=1" host=myapp-dev.herokuapp.com request_id=7dcbbc85-2f7a-4acf-94c3-adc8231eb980 fwd="109.159.48.152" dyno=web.1 connect=0ms service=1ms status=302 bytes=171 protocol=http Jun 11 06:25:54 myapp-dev heroku/router: at=info method=GET path="/" host=myapp-dev.herokuapp.com request_id=5be5f96c-0e29-4caf-9183-c3976ec19c9b fwd="109.159.48.152" dyno=web.1 connect=0ms service=24ms status=200 bytes=6143 protocol=https

我已经登录了我的Signin控制器,并且该呼叫肯定没有到达它。如果我只是在浏览器中键入/signin?error=1,它就会毫无问题地到达控制器。

我尝试添加自定义AuthenticationFailureHandler,而不是使用.failureUrl()。同样,它在本地运行良好(在使用Eclipse运行的Tomcat上,以及从命令行启动独立的Spring Boot启动),但在部署应用程序时则不行。

任何人都可以建议我可能做错了什么,或者另一种可能回避这个问题的方法吗?

0 个答案:

没有答案