java - 如何以编程方式使用户超时 session 过期

标签 java spring spring-security

如果管理员禁用或删除了用户,即使他们有 Activity session ,我也希望用户注销。 我正在使用过滤器执行此操作,但我无法清除 session ,我什至不明白为什么?

我还在 web.xml 文件中添加了 HttpSessionEventPublisher

public class CheckUserFilter extends GenericFilterBean{

    private AuthenticationTrustResolver authenticationTrustResolver = new AuthenticationTrustResolverImpl();

    @Autowired
    private UserService userService;

    @Autowired
    private SessionRegistryImpl sessionRegistryImpl;

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{

        boolean enabled = true;

         HttpServletRequest req = (HttpServletRequest) request;

         String ajaxHeader = ((HttpServletRequest) request).getHeader("X-Requested-With");

         if ("XMLHttpRequest".equals(ajaxHeader)) {

             if (!authenticationTrustResolver.isAnonymous(SecurityContextHolder.getContext().getAuthentication())) {

                    UserDetails loggedUser = (UserDetails) SecurityContextHolder.getContext()
                            .getAuthentication().getPrincipal();


                    enabled = userService.isUserEnabled(loggedUser.getUsername(), req);

                    if(!enabled){
                        //req.logout();

                        List<SessionInformation> sessions = sessionRegistryImpl.getAllSessions(SecurityContextHolder.getContext()
                                .getAuthentication().getPrincipal(), false);
                        sessionRegistryImpl.getSessionInformation(sessions.get(0).getSessionId()).expireNow();
                        request.getRequestDispatcher("/login").forward(request, response);


                    }
                }
       }
           chain.doFilter(request, response);

     }
}

最佳答案

关于java - 如何以编程方式使用户超时 session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58544240/

相关文章:

java - spring-boot-starter-parent 在 pom 文件中到底做了什么?

java - 如何从 RestTemplate 读取响应 header ?

Grails 1.3.7 spring security - 启动时未找到线程绑定(bind)请求

java - 实现 CQRS 模式时如何使用 Spring 处理 JWT 身份验证?

spring-security - 如何在 Spring 获取之前捕获 Spring Security 登录表单?

Java 小程序和缓存问题

java - 有多行时将 RadioButton 和 EditText 对齐在同一行

java - 如何模拟私有(private)内部类

java - 如何在Spring MVC中的@RequestParam中获取LIST输入?

spring - Spring 4.x 是否支持 Mybatis?