JwtAuthentication.java

package jasper.security.jwt;

import io.jsonwebtoken.Claims;
import jasper.domain.User;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.util.Assert;

import java.util.Collection;

public class JwtAuthentication extends AbstractAuthenticationToken {

	private final User user;
	private final Claims claims;
	private final String principal;

	public JwtAuthentication(String principal) {
		super(AuthorityUtils.NO_AUTHORITIES);
		this.principal = principal;
		this.user = null;
		this.claims = null;
		setAuthenticated(false);
	}

	public JwtAuthentication(String principal, User user, Claims claims, Collection<? extends GrantedAuthority> authorities) {
		super(authorities);
		this.principal = principal;
		this.user = user;
		this.claims = claims;
		super.setAuthenticated(true); // must use super, as we override
	}

	@Override
	public String getPrincipal() {
		return principal;
	}

	@Override
	public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
		Assert.isTrue(!isAuthenticated,
			"Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead");
		super.setAuthenticated(false);
	}

	@Override
	public Object getCredentials() {
		return null;
	}

	@Override
	public User getDetails() {
		return user;
	}

	public Claims getClaims() {
		return claims;
	}
}