I am trying to integrate test a Spring Controller method that uses a spring session scoped bean which is injected into the controller. In order for my test to pass I must be able to access my session bean to set some values on it before I make my mock call to this controller method. Issue is a new session bean is created when I make the call instead of using the one I pulled of the mock application context. How can I make my controller use the same UserSession bean?
Here is my test case
    @RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("src/main/webapp")
@ContextConfiguration({"file:src/main/webapp/WEB-INF/applicationContext.xml",
        "file:src/main/webapp/WEB-INF/rest-servlet.xml",
        "file:src/main/webapp/WEB-INF/servlet-context.xml"})
public class RoleControllerIntegrationTest {
    @Autowired
    private WebApplicationContext wac;
    protected MockMvc mockMvc;
    protected MockHttpSession mockSession;
    @BeforeClass
    public static void setupClass(){
        System.setProperty("runtime.environment","TEST");
        System.setProperty("com.example.UseSharedLocal","true");
        System.setProperty("com.example.OverridePath","src\\test\\resources\\properties");
        System.setProperty("JBHSECUREDIR","C:\\ProgramData\\JBHSecure");
    }
    @Before
    public void setup(){
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
        mockSession = new MockHttpSession(wac.getServletContext(), UUID.randomUUID().toString());
        mockSession.setAttribute("jbhSecurityUserId", "TESTUSER");
    }
    @Test
    public void testSaveUserRole() throws Exception {
        UserSession userSession = wac.getBean(UserSession.class);
        userSession.setUserType(UserType.EMPLOYEE);
        userSession.setAuthorizationLevel(3);
        Role saveRole = RoleBuilder.buildDefaultRole();
        Gson gson = new Gson();
        String json = gson.toJson(saveRole);
        MvcResult result = this.mockMvc.perform(
                post("/role/save")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(json)
                        .session(mockSession))
                .andExpect(status().isOk())
                .andReturn();
        MockHttpServletResponse response = result.getResponse();
    }
Here is my controller method I am needing tested
    @Resource(name="userSession")
    private UserSession userSession;
    @RequestMapping(method = RequestMethod.POST, value = "/save")
    public @ResponseBody ServiceResponse<Role> saveRole(@RequestBody Role role,HttpSession session){
        if(userSession.isEmployee() && userSession.getAuthorizationLevel() >= 3){
            try {
                RoleDTO savedRole = roleService.saveRole(role,ComFunc.getUserId(session));
                CompanyDTO company = userSession.getCurrentCompany();
It is not passing this line because the UserSession Object is not the same if(userSession.isEmployee() && userSession.getAuthorizationLevel() >= 3){
This is the declaration of my user session bean.
   @Component("userSession")
   @Scope(value="session",proxyMode= ScopedProxyMode.INTERFACES)
   public class UserSessionImpl implements UserSession, Serializable  {
    private static final long serialVersionUID = 1L;
Both controlle and bean are created using component scan in my applicationContext.xml
<context:annotation-config />
    <!-- Activates various annotations to be detected in bean classes -->
    <context:component-scan
        base-package="
            com.example.app.externalusersecurity.bean,
            com.example.app.externalusersecurity.service,
            com.example.app.externalusersecurity.wsc"/>
    <mvc:annotation-driven />
 
     
     
     
    