java 如何使用jwt令牌拦截器

qlvxas9a  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(144)

下面是我代码,日志显示D/test:用户不存在
如何发送 JWT 令牌??

public class ApiClient implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {

        Log.d("test",AccessTokenSharedPreferences.getAccessToken("1"));

        Request request = chain.request()
                .newBuilder()
                .url(BasicInfo.baseUrl)
                .addHeader("X-AUTH-ACCESS-TOKEN", AccessTokenSharedPreferences.getAccessToken("1"))
                .addHeader("X-AUTH-REFRESH-TOKEN", AccessTokenSharedPreferences.getRefreshToken("1"))
                .build();
        Response response = chain.proceed(request);
        return response;
    }

}

谢谢

hpcdzsge

hpcdzsge1#

我也有同样的问题,但我没有找到一个正确和方便的答案。不过,我想我有一个解决办法:在向服务器发出任何请求之前,可以使用interfaces -listener。也就是说,在每次尝试发送任何授权请求时接收一个令牌,并从发送的令牌开始工作。例如,您希望向服务器发送一个带有授权的get请求(在我的例子中是JWT承载令牌)。首先,我声明了一个新接口***AuthenticationContract***:

public interface AuthentificationContract {
interface Process{
    void Auth();
    void Auth(String login, String password);
}
interface Listener{
    void AuthSuccess(String token);
    void AuthError(String message);
}}

其中,***Process***是验证类实现的接口,您可以在其中向服务器发送请求以接收JWT标记,***Listener***是将根据接收标记的结果触发主目标类的监听程序。在Authentication类中,您可以实现Process接口并实现Auth方法以获取标记。

public class Authentification implements AuthentificationContract.Process{
private AuthentificationContract.Listener listener;
public Authentification(AuthentificationContract.Listener _listener){
  this.listener = _listener;
 }
@Override
public void Auth(){
String token = //your request to get a token
//when your token arrived:
listener.AuthSuccess(token);
//else
listener.AuthError("ERROR");
}
}

重要提示!!:****在构造函数中,您必须传递实现Listener接口的对象以触发目标类(或视图)。在View或Targer类中,您应该实现接口Listener:

public class StartAcitivity extends AppCompatActivity implements AuthentificationContract.Listener{

private Authentification auth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start_acitivity);

    auth = new Authentification(this);

    auth.Auth();

}

@Override
public void AuthSuccess(String token) {
    //your token is here, you can do request with this token, just add it like one of headers
}

@Override
public void AuthError(String message) {
    Log.d("ERROR", message);
}
}

当然,这只是一个示例,在视图中执行某些操作并不令人满意,最好使用MVP模式

相关问题