如何在api url中传递用户名和密码

时间:2015-12-09 07:42:15

标签: java spring rest security url

我有一个由弹簧安全保护的应用程序。 我添加了BasicAuthInterceptor。但是当我向服务器请求一个rest api url时,我看到了html登录页面而不是json。 所以我想也许可以在网址中传递用户名和密码来请求api.But我不知道怎么做。非常感谢任何想法/建议。干杯!

这是我的BasicAuthInterceptor班级

public class BasicAuthInterceptor implements ClientHttpRequestInterceptor {

private static final Logger logger = LoggerFactory.getLogger( BasicAuthInterceptor.class );

private final String username;
private final String password;

public BasicAuthInterceptor( String username, String password ) {
    this.username = username;
    this.password = password;
}

@Override
public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] bytes, ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {

   // code here ...
}

和主测试中的客户端应用程序():

public static void main(String[] args) {
    SpringApplication.run(App.class, args);

    //Get a new Rest-Template
    final RestTemplate template = new RestTemplate();

    //Create and initialize the interceptor
    final List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
    interceptors.add( new BasicAuthInterceptor( "admin", "admin" ) );
    template.setInterceptors( interceptors );

    //Do your request as normal
    final String helloResponse = template.getForObject( "http://localhost:9000/api/brands", String.class );

    System.out.println(helloResponse);
}

1 个答案:

答案 0 :(得分:0)

这取决于您使用服务器端的身份验证类型。

例如,对于基本身份验证,您需要在请求标头中添加一个名为Authorization的具有此内容的特定标头

Basic [TOKEN]

[TOKEN]代表

Base64(username:password)

即,用'和'连接的用户名和密码,全部在Base64中编码。 (https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side

所有这些都应该在方法intercept中完成(在你的代码中)。

您可以通过HttpRequest对象访问标题(请参阅文档@ https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpRequest.html

如果您使用的是与基本身份验证不同的内容,那么只需Google即可搜索要添加的正确标头。