Spring Security test session timeout
I am trying to write some tests for a practice project with spring security and I am using MockMvc and related classes to do so.
So my basic configuration looks like this:
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
With tests similar to this one:
@Test
public void handleUserJSONRequest_shouldReturn401_withoutLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON"));
int status = action.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status, status == 401);
}
What I still fail to achieve is to write a test to verify that my custom session-timeout is working.
I tried the following:
@Test
public void sessionTimeoutShouldInvalidateSession_withLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON").with(user("user")));
MockHttpSession session = (MockHttpSession) action.andReturn().getRequest().getSession();
TimeUnit.SECONDS.sleep(20);
ResultActions action2 = mvc.perform(get("/userAsJSON").session(session));
int status2 = action2.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status2, status2 == 401);
}
But it will still return 200 (session timeout is set to 10 for testing purposes and can be verified to be working via curl); so I assume that has something to do with how MockMvc and MockHttpSession work.
Is there a way I can still test my session-timeout's functionality?
EDIT: On request -> my configuration:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.sessionManagement()
//number of concurrent sessions allowed for the same user
.maximumSessions(1)
.and()
.sessionFixation()
.migrateSession();
http.addFilterBefore(authenticationFilter(), BasicAuthenticationFilter.class)
.csrf().disable()
.httpBasic().disable()
.exceptionHandling()
.authenticationEntryPoint(myRestAuthenticationEntryPoint)
.and()
.authorizeRequests()
.antMatchers("/secured")
.hasRole("ADMIN")
.antMatchers("/userAsJSON")
.authenticated()
.antMatchers("/unsecured")
.permitAll()
.antMatchers("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(this::handleLogoutSuccess)
.invalidateHttpSession(true);
}
with:
public void handleLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication){
response.setStatus(HttpServletResponse.SC_OK);
}
and:
@Component
public class MyRestAuthenticationEntryPoint
implements AuthenticationEntryPoint {
@Override
public void commence(
HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException {
response.sendError( HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized" );
}
}
spring spring-security spring-test
add a comment |
I am trying to write some tests for a practice project with spring security and I am using MockMvc and related classes to do so.
So my basic configuration looks like this:
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
With tests similar to this one:
@Test
public void handleUserJSONRequest_shouldReturn401_withoutLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON"));
int status = action.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status, status == 401);
}
What I still fail to achieve is to write a test to verify that my custom session-timeout is working.
I tried the following:
@Test
public void sessionTimeoutShouldInvalidateSession_withLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON").with(user("user")));
MockHttpSession session = (MockHttpSession) action.andReturn().getRequest().getSession();
TimeUnit.SECONDS.sleep(20);
ResultActions action2 = mvc.perform(get("/userAsJSON").session(session));
int status2 = action2.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status2, status2 == 401);
}
But it will still return 200 (session timeout is set to 10 for testing purposes and can be verified to be working via curl); so I assume that has something to do with how MockMvc and MockHttpSession work.
Is there a way I can still test my session-timeout's functionality?
EDIT: On request -> my configuration:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.sessionManagement()
//number of concurrent sessions allowed for the same user
.maximumSessions(1)
.and()
.sessionFixation()
.migrateSession();
http.addFilterBefore(authenticationFilter(), BasicAuthenticationFilter.class)
.csrf().disable()
.httpBasic().disable()
.exceptionHandling()
.authenticationEntryPoint(myRestAuthenticationEntryPoint)
.and()
.authorizeRequests()
.antMatchers("/secured")
.hasRole("ADMIN")
.antMatchers("/userAsJSON")
.authenticated()
.antMatchers("/unsecured")
.permitAll()
.antMatchers("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(this::handleLogoutSuccess)
.invalidateHttpSession(true);
}
with:
public void handleLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication){
response.setStatus(HttpServletResponse.SC_OK);
}
and:
@Component
public class MyRestAuthenticationEntryPoint
implements AuthenticationEntryPoint {
@Override
public void commence(
HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException {
response.sendError( HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized" );
}
}
spring spring-security spring-test
Could you please provide you spring-security configuration
– borino
Nov 14 '18 at 5:16
Sorry for the late reply, unexpected vacation. Is that all you need?
– Wolfone
Nov 28 '18 at 9:58
add a comment |
I am trying to write some tests for a practice project with spring security and I am using MockMvc and related classes to do so.
So my basic configuration looks like this:
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
With tests similar to this one:
@Test
public void handleUserJSONRequest_shouldReturn401_withoutLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON"));
int status = action.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status, status == 401);
}
What I still fail to achieve is to write a test to verify that my custom session-timeout is working.
I tried the following:
@Test
public void sessionTimeoutShouldInvalidateSession_withLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON").with(user("user")));
MockHttpSession session = (MockHttpSession) action.andReturn().getRequest().getSession();
TimeUnit.SECONDS.sleep(20);
ResultActions action2 = mvc.perform(get("/userAsJSON").session(session));
int status2 = action2.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status2, status2 == 401);
}
But it will still return 200 (session timeout is set to 10 for testing purposes and can be verified to be working via curl); so I assume that has something to do with how MockMvc and MockHttpSession work.
Is there a way I can still test my session-timeout's functionality?
EDIT: On request -> my configuration:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.sessionManagement()
//number of concurrent sessions allowed for the same user
.maximumSessions(1)
.and()
.sessionFixation()
.migrateSession();
http.addFilterBefore(authenticationFilter(), BasicAuthenticationFilter.class)
.csrf().disable()
.httpBasic().disable()
.exceptionHandling()
.authenticationEntryPoint(myRestAuthenticationEntryPoint)
.and()
.authorizeRequests()
.antMatchers("/secured")
.hasRole("ADMIN")
.antMatchers("/userAsJSON")
.authenticated()
.antMatchers("/unsecured")
.permitAll()
.antMatchers("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(this::handleLogoutSuccess)
.invalidateHttpSession(true);
}
with:
public void handleLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication){
response.setStatus(HttpServletResponse.SC_OK);
}
and:
@Component
public class MyRestAuthenticationEntryPoint
implements AuthenticationEntryPoint {
@Override
public void commence(
HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException {
response.sendError( HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized" );
}
}
spring spring-security spring-test
I am trying to write some tests for a practice project with spring security and I am using MockMvc and related classes to do so.
So my basic configuration looks like this:
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
With tests similar to this one:
@Test
public void handleUserJSONRequest_shouldReturn401_withoutLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON"));
int status = action.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status, status == 401);
}
What I still fail to achieve is to write a test to verify that my custom session-timeout is working.
I tried the following:
@Test
public void sessionTimeoutShouldInvalidateSession_withLoggedInUser() throws Exception{
ResultActions action = mvc.perform(get("/userAsJSON").with(user("user")));
MockHttpSession session = (MockHttpSession) action.andReturn().getRequest().getSession();
TimeUnit.SECONDS.sleep(20);
ResultActions action2 = mvc.perform(get("/userAsJSON").session(session));
int status2 = action2.andReturn().getResponse().getStatus();
assertTrue("expected status code = 401 ; current status code = " + status2, status2 == 401);
}
But it will still return 200 (session timeout is set to 10 for testing purposes and can be verified to be working via curl); so I assume that has something to do with how MockMvc and MockHttpSession work.
Is there a way I can still test my session-timeout's functionality?
EDIT: On request -> my configuration:
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.sessionManagement()
//number of concurrent sessions allowed for the same user
.maximumSessions(1)
.and()
.sessionFixation()
.migrateSession();
http.addFilterBefore(authenticationFilter(), BasicAuthenticationFilter.class)
.csrf().disable()
.httpBasic().disable()
.exceptionHandling()
.authenticationEntryPoint(myRestAuthenticationEntryPoint)
.and()
.authorizeRequests()
.antMatchers("/secured")
.hasRole("ADMIN")
.antMatchers("/userAsJSON")
.authenticated()
.antMatchers("/unsecured")
.permitAll()
.antMatchers("/login")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessHandler(this::handleLogoutSuccess)
.invalidateHttpSession(true);
}
with:
public void handleLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication){
response.setStatus(HttpServletResponse.SC_OK);
}
and:
@Component
public class MyRestAuthenticationEntryPoint
implements AuthenticationEntryPoint {
@Override
public void commence(
HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException {
response.sendError( HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized" );
}
}
spring spring-security spring-test
spring spring-security spring-test
edited Nov 28 '18 at 9:57
Wolfone
asked Nov 13 '18 at 16:40
WolfoneWolfone
399412
399412
Could you please provide you spring-security configuration
– borino
Nov 14 '18 at 5:16
Sorry for the late reply, unexpected vacation. Is that all you need?
– Wolfone
Nov 28 '18 at 9:58
add a comment |
Could you please provide you spring-security configuration
– borino
Nov 14 '18 at 5:16
Sorry for the late reply, unexpected vacation. Is that all you need?
– Wolfone
Nov 28 '18 at 9:58
Could you please provide you spring-security configuration
– borino
Nov 14 '18 at 5:16
Could you please provide you spring-security configuration
– borino
Nov 14 '18 at 5:16
Sorry for the late reply, unexpected vacation. Is that all you need?
– Wolfone
Nov 28 '18 at 9:58
Sorry for the late reply, unexpected vacation. Is that all you need?
– Wolfone
Nov 28 '18 at 9:58
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53285666%2fspring-security-test-session-timeout%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53285666%2fspring-security-test-session-timeout%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Could you please provide you spring-security configuration
– borino
Nov 14 '18 at 5:16
Sorry for the late reply, unexpected vacation. Is that all you need?
– Wolfone
Nov 28 '18 at 9:58