/*
 * Copyright 2002-2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.security.test.web.servlet.request;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import javax.servlet.Filter;

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=SecurityMockMvcRequestPostProcessorsAuthenticationStatelessTests.Config.class)
@WebAppConfiguration
public class SecurityMockMvcRequestPostProcessorsAuthenticationStatelessTests {

    @Autowired
    private WebApplicationContext context;

    @Autowired
    private Filter springSecurityFilterChain;

    private MockMvc mvc;

    @Before
    public void setup() {
        mvc = MockMvcBuilders
                .webAppContextSetup(context)
                .addFilters(springSecurityFilterChain)
                .build();
    }

    @Test
    public void userRequestPostProcessorWorksWithStateless() throws Exception {
       mvc
          .perform(get("/").with(user("user")))
          .andExpect(status().is2xxSuccessful());
    }

    @EnableWebSecurity
    @EnableWebMvc
    static class Config extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            super.configure(http);

            http
                .sessionManagement()
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        }

        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
            auth
                .inMemoryAuthentication();
        }

        @RestController
        static class Controller {
            @RequestMapping
            public String hello() {
                return "Hello";
            }
        }
    }
}
@@ -826,69 +826,8 @@
 ed;%0A
-import org.springframework.context.annotation.Configuration;%0A
 impo
@@ -926,24 +926,24 @@
 gerBuilder;%0A
+
 import org.s
@@ -1275,16 +1275,87 @@
 Policy;%0A
+import org.springframework.security.test.context.support.WithMockUser;%0A
 import o
@@ -1936,31 +1936,97 @@
 ort 
-javax.servlet.Filter
+static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*
 ;%0A
-%0A
 impo
@@ -2622,70 +2622,8 @@
 t;%0A%0A
-    @Autowired%0A    private Filter springSecurityFilterChain;%0A%0A
     
@@ -2779,17 +2779,12 @@
   .a
-ddFilters
+pply
 (spr
@@ -2798,19 +2798,10 @@
 rity
-FilterChain
+()
 )%0A  
@@ -2827,24 +2827,40 @@
 d();%0A    %7D%0A%0A
+    // SEC-2593%0A
     @Test%0A  
@@ -2948,16 +2948,16 @@
     mvc%0A
-
         
@@ -3049,24 +3049,233 @@
 ());%0A    %7D%0A%0A
+    // SEC-2593%0A    @WithMockUser%0A    @Test%0A    public void withMockUserWorksWithStateless() throws Exception %7B%0A       mvc%0A          .perform(get(%22/%22))%0A          .andExpect(status().is2xxSuccessful());%0A    %7D%0A%0A
     @EnableW

Add additional test