package com.yuanchu.limslaboratory.shiro.utils; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.exceptions.JWTVerificationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.credential.CredentialsMatcher; import org.springframework.stereotype.Component; @Component public class JwtCredentialsMatcher implements CredentialsMatcher { /** * JwtCredentialsMatcher只需验证JwtToken内容是否合法 */ @Override public boolean doCredentialsMatch(AuthenticationToken authenticationToken, AuthenticationInfo authenticationInfo) { String token = authenticationToken.getCredentials().toString(); String account = authenticationToken.getPrincipal().toString(); try { Algorithm algorithm = Algorithm.HMAC256(JwtUtils.getSecret()); JWTVerifier verifier = JWT.require(algorithm).withClaim("account", account).build(); verifier.verify(token); return true; } catch (JWTVerificationException e) { } catch (Exception e){ e.printStackTrace(); } return false; } }