Spring 注销后引导 SessionScoped 对象未过期。在不同的控制器中自动装配两个不同的对象
Spring Boot SessionScoped Object not expired after logout. Autowires two different objects in different controllers
我需要在我的控制器/服务中自动连接登录用户对象 classes。所以我创建了一个 util Bean 作为
@Component
public class UtilBeans {
@Autowired
UserService userService;
@Bean(name = "loggedInUser")
@SessionScope
public UserMaster userMaster() {
UserMaster user;
try {
user = (UserMaster) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
user.setAuthorities(userService.getUserAuthorities(user.getUserId()));
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("user Not logged in");
}
return user;
}
}
并在控制器 class 中用作
@Autowired
@Qualifier(value = "loggedInUser")
UserMaster user;
在大多数控制器中,它工作正常,但在某些控制器中,第一次登录的用户对象在我重新启动应用程序之前不会改变。
我的注销配置如下
.formLogin().loginPage("/loginForm").permitAll()
.and()
.formLogin().defaultSuccessUrl("/dashboard").and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.deleteCookies("JSESSIONID").clearAuthentication(true)
.invalidateHttpSession(true).permitAll();
请帮我看看哪里做错了。我的理解是,Session Scoped 对象应该在注销时过期,它确实会发生变化,但为什么在某些情况下不会。
我错误地在控制器中为用户分配了相同类型和相同 ID 的不同对象,更改代码以删除该分配解决了问题。
我需要在我的控制器/服务中自动连接登录用户对象 classes。所以我创建了一个 util Bean 作为
@Component
public class UtilBeans {
@Autowired
UserService userService;
@Bean(name = "loggedInUser")
@SessionScope
public UserMaster userMaster() {
UserMaster user;
try {
user = (UserMaster) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
user.setAuthorities(userService.getUserAuthorities(user.getUserId()));
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("user Not logged in");
}
return user;
}
}
并在控制器 class 中用作
@Autowired
@Qualifier(value = "loggedInUser")
UserMaster user;
在大多数控制器中,它工作正常,但在某些控制器中,第一次登录的用户对象在我重新启动应用程序之前不会改变。
我的注销配置如下
.formLogin().loginPage("/loginForm").permitAll()
.and()
.formLogin().defaultSuccessUrl("/dashboard").and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.deleteCookies("JSESSIONID").clearAuthentication(true)
.invalidateHttpSession(true).permitAll();
请帮我看看哪里做错了。我的理解是,Session Scoped 对象应该在注销时过期,它确实会发生变化,但为什么在某些情况下不会。
我错误地在控制器中为用户分配了相同类型和相同 ID 的不同对象,更改代码以删除该分配解决了问题。