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