AngularJS/ Spring Boot 应用程序 - 空闲时间后自动导航到登录页面

Posted

技术标签:

【中文标题】AngularJS/ Spring Boot 应用程序 - 空闲时间后自动导航到登录页面【英文标题】:AngularJS/ Spring Boot application - automatically navigate to signin page after an idle time 【发布时间】:2017-09-27 08:00:59 【问题描述】:

我在前端使用 AngularJS,在后端使用 Spring Boot/Spring Security。 后端是这样的:

@Component
public class TokenUtils 

public static final String MAGIC_KEY = "obfuscate";

public String createToken(final UserDetails userDetails) 
    final long expires = System.currentTimeMillis() + 1000L * 60 * 60;
    return userDetails.getUsername() + ":" + expires + ":" + computeSignature(userDetails, expires);


public String computeSignature(UserDetails userDetails, long expires) 
    final StringBuilder signatureBuilder = new StringBuilder();
    signatureBuilder.append(userDetails.getUsername()).append(":");
    signatureBuilder.append(expires).append(":");
    signatureBuilder.append(userDetails.getPassword()).append(":");
    signatureBuilder.append(TokenUtils.MAGIC_KEY);

    MessageDigest digest;
    try 
        digest = MessageDigest.getInstance("MD5");
     catch (NoSuchAlgorithmException e) 
        throw new IllegalStateException("No MD5 algorithm available!");
    
    return new String(Hex.encode(digest.digest(signatureBuilder.toString().getBytes())));


public String getUserNameFromToken(final String authToken) 
    if (null == authToken) 
        return null;
    
    final String[] parts = authToken.split(":");
    return parts[0];


public boolean validateToken(final String authToken, final UserDetails userDetails) 
    final String[] parts = authToken.split(":");
    final long expires = Long.parseLong(parts[1]);
    final String signature = parts[2];
    final String signatureToMatch = computeSignature(userDetails, expires);
    return expires >= System.currentTimeMillis() && signature.equals(signatureToMatch);
    

如果用户有一段时间不使用前端并通过例如返回到前端一个bottonclick,他被移动到登录页面。 我的意图是应用程序在到期时间后自动移动到登录页面。 有没有可能在前端使用 AngularJS 来做到这一点?

【问题讨论】:

【参考方案1】:

你可能想使用ng-idle plugin

如何配置?

 myApp.config(['KeepaliveProvider', 'IdleProvider', function(KeepaliveProvider, IdleProvider) 
  IdleProvider.idle(5);
  IdleProvider.timeout(5);
  KeepaliveProvider.interval(10);
]);

如何在任何范围内实现和监听超时?

它在 $rootScope 发出一些事件。您可以在任何范围内收听 $scope.$on('IdleStart',fn) 喜欢的功能 这样您就可以调用注销 api 端点并更改登录页面的路由

【讨论】:

以上是关于AngularJS/ Spring Boot 应用程序 - 空闲时间后自动导航到登录页面的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot 弹簧安全 angularjs

如何从 URL、Spring Boot 和 AngularJs 应用程序中删除 #?

如何处理 Spring Boot、AngularJS 应用程序中的 CORS 错误?

带有Angularjs注销错误的Spring Boot

使用 AngularJS $http.post 登录 Spring Boot

Spring Boot CORS 过滤器不适用于 AngularJS