Spring Security, session timeout, MaxInactiveInterval etc.

0

Używam w projekcie WebSecurityConfigurerAdapter i znalazłem feature do zarządzania sesją, jak poniżej.
Czy można w tym jakoś ustawić customowy czas sesji?

w xmlu to można było chyba tak ustawić:

<session-config>
    <session-timeout>15</session-timeout>
</session-config>
Override
    protected void configure(HttpSecurity http) {
        http.authorizeRequests()
                .antMatchers()
                                 // links, roles here etc.
                // session management
                .sessionManagement().invalidSessionUrl(url).maximumSessions(1)
                .expiredUrl(url)
                .maxSessionsPreventsLogin(false)
                .and()
                .sessionCreationPolicy(SessionCreationPolicy.NEVER)
                .and()
                //dalej login, logout  custom handlers etc.
                                .successHandler(sessionLifecycleHandler()).

To zrobiłem swojego beana w tym stylu:

public class SessionLifecycleHandler extends SimpleUrlAuthenticationSuccessHandler {
    public final Integer SESSION_TIMEOUT_IN_SECONDS = 60 * 60;
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
            Authentication authentication) throws ServletException, IOException {
        request.getSession().setMaxInactiveInterval(SESSION_TIMEOUT_IN_SECONDS);
    }
}

Chciałbym tez ustawić redirecta na expired session na login, to chyba tez ten session management powinien pozwolic.
Ale coś nie chce to zadziałać.

Za wszelką pomoc bardzo dziękuję.

0

ok, znalazlem coś co mogę dorzucić do application.properties

server.session-timeout= # session timeout in seconds
może zadziała.

Chociaż gdzieś przeczytałem, że to minuty a nie sekundy

0

Działa!
Musze sobie zakodować, że jeśli znajduję rozwiązanie w web.xml to znaczy, że trzeba szukać opcji dla application.properties.

W każdym razie spring jest super.

0

a... session timeout zadzialalo, ale redirect juz nie.

Jak ustawic redirect, zeby jesli leci request a sesja jest expired to zeby przekierowywalo na login?

0

Najlepiej to chyba ustawić filtr security który każdego bez aktywnej sesji będzie przekierowywał na login.

0

W sensie coś takiego powinno zadziałać?

w spring security:

.and()
.addFilter(customFilter())
.and()

@Bean
public Filter customFilter() {
return new CustomFilter();
}

public class CustomFilter extends GenericFilterBean {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) request;
        HttpSession session = req.getSession(false);

        if (session != null && !session.isNew()) {
            chain.doFilter(request, response);
        } else {
            res.sendRedirect("/login");
        }
    }
}
0

w sensie w xml rejestrujesz ten filtr, ale sam filtr piszesz już w java, jak powyżej?
możesz pokazać jakby to wyglądało w xml?

ps. nieco zle castowanie dałem powyżej.

0

Niestety, nie używam takowego adaptera więc nie wiem jak on się będzie zachowywał. Nie wiem też dlaczego go używasz więc nie jestem w stanie doradzić Ci czegokolwiek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0