1、编写一个新的认证对象继承自AuthenticationToken,当然也可以直接使用AuthenticationToken
package com.mochenli.eternalstar.shiro.token;
import com.mochenli.eternalstar.common.util.TokenUtil;
import org.apache.shiro.authc.AuthenticationToken;
public class JwtToken implements AuthenticationToken {
private String username;
private String token;
public JwtToken(String token) {
this.token = token;
this.username = TokenUtil.analysisTokenByUserName(token);
}
public JwtToken(){
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public Object getPrincipal() {
return username;
}
@Override
public Object getCredentials() {
return token;
}
}
2、编写一个过滤器JwtFliter继承自AuthenticatingFilter
package com.mochenli.eternalstar.shiro.filter;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.mochenli.eternalstar.common.enums.ExceptionCode;
import com.mochenli.eternalstar.common.exception.BaseException;
import com.mochenli.eternalstar.common.util.ApiResponse;
import com.mochenli.eternalstar.common.util.CookiesUtil;
import com.mochenli.eternalstar.common.util.TokenUtil;
import com.mochenli.eternalstar.shiro.token.JwtToken;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.authc.AuthenticatingFilter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@EqualsAndHashCode(callSuper = true)
@Slf4j
@AllArgsConstructor
@NoArgsConstructor
@Data
public class JwtFilter extends AuthenticatingFilter {
private String token;
private boolean enabledTest;