Java 如何更改PersistentTokenBasedMemberMeservices logout()方法

Java 如何更改PersistentTokenBasedMemberMeservices logout()方法,java,spring,spring-boot,spring-security,remember-me,Java,Spring,Spring Boot,Spring Security,Remember Me,我正在使用类PersistentTokenBasedMemberMeservices来处理RememberMe令牌。有一个logout()方法,当意外地注销时调用它,它如下所示: public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { super.logout(request, response

我正在使用类PersistentTokenBasedMemberMeservices来处理RememberMe令牌。有一个logout()方法,当意外地注销时调用它,它如下所示:

public void logout(HttpServletRequest request, HttpServletResponse response,
            Authentication authentication) {
        super.logout(request, response, authentication);

        if (authentication != null) {
            tokenRepository.removeUserTokens(authentication.getName());
        }
    }
我所要做的就是重写或以某种方式仅更改这个1方法,因为我不想删除所有令牌,而是想根据经过身份验证的用户和设备删除令牌,这样用户从其他设备获得的记住我的令牌就会被存储。但这可能是我想出来的

所以我尝试扩展类并重写该方法,但它甚至没有被调用

@Service
public class CustomRememberMeService  extends PersistentTokenBasedRememberMeServices {

    public CustomRememberMeService(String key, MyUserDetailsService userDetailsService, PersistentTokenRepository tokenRepository) {
        super(key, userDetailsService, tokenRepository);
    }

    @Override
    public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
        super.logout(request, response, authentication);
    }
}
我在配置文件中创建了这种类型的bean

    @Bean
    public AbstractRememberMeServices rememberMeServices() {
        CustomRememberMeService rememberMeServices =
                new CustomRememberMeService(rememberMeKey, myUserDetailsService, persistentTokenRepository());
        rememberMeServices.setAlwaysRemember(true);
        return rememberMeServices;
    }
但是仍然没有调用我的重写方法

我的另一个想法是使用AOP来更改logout()方法的参数,并将身份验证更改为null,这样令牌就不会被删除,我可以自己按我想要的方式删除它,但该方面从未被调用,我尝试了其他方面,它的调用非常好,所以没有问题。我的方面课

@Component
@Aspect
public class AspectForDisablingRememberMeLogout {

    @Around("rememberMeLogout()")
    public void RememberMeLogoutAdvice(ProceedingJoinPoint joinPoint) {
        Object[] newArgs = joinPoint.getArgs();
        try {
            IntStream.range(0, newArgs.length)
                    .filter(i -> newArgs[i] instanceof Authentication)
                    .forEach(i -> newArgs[i] = null); 
            joinPoint.proceed(newArgs);
        } catch(Throwable t) {
            t.printStackTrace();
        }
    }

    @Pointcut("execution(* org.springframework.security.web.authentication.rememberme.*.logout(..))")
    public void rememberMeLogout() {}

}
如果你有一些纠正我,使其工作,或任何其他想法,我将不胜感激。 谢谢你的帮助