1

I am looking to setup the ForwardedHeaderFilter in spring security so I can let spring know which protocol to use after login. I have several app servers behind a load-balancer (using ssl termination) and spring security is redirecting the user using http (instead of https). Because of this, my users are now getting a obtrusive warning message. The only examples I can find online are with spring boot which I do not implement.

I thought of using "addFilterBefore()" method to my security configuration, but the filter is never called.

Any ideas?

// Apply sameOrigin policy for iframe embeddings
http.headers().frameOptions().sameOrigin();

// ********* Add filter here?  *******
http.addFilterBefore(new ForwardedHeaderFilter(), ChannelProcessingFilter.class);

// Authorization filters
http.authorizeRequests().antMatchers("/sysAdmin/**", "/monitoring/**").access("isFullyAuthenticated() and hasRole('GOD')");
http.authorizeRequests().antMatchers("/app/**").authenticated();
http.authorizeRequests().antMatchers("/**").permitAll();

http.formLogin()
        .loginPage("/public/login.jsp")
        .loginProcessingUrl("/login")
        .usernameParameter("username")
        .passwordParameter("password")
        .defaultSuccessUrl("/app/Dashboard.action", false)
        .failureHandler(customAuthenticationFailureHandler());

// Disable so that logout "get" url works (otherwise you have to do a html form)
http.csrf().disable();
http.logout().logoutSuccessUrl("/public/login.jsp");

http.sessionManagement()
        .invalidSessionUrl("/public/expiredSession.jsp?expiredId=2")
        .maximumSessions(2)
        .sessionRegistry(sessionRegistry())
        .expiredUrl("/public/expiredSession.jsp?expiredId=3");

1 Answer 1

8

I ended up adding the filter like this and everything seemed to work

// Added for load balancer headers (X-Forwarded-For, X-Forwarded-Proto, etc)
http.addFilterBefore(new ForwardedHeaderFilter(), WebAsyncManagerIntegrationFilter.class);

Not the answer you're looking for? Browse other questions tagged or ask your own question.