首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring 3.1中的基本身份验证

Spring 3.1中的基本身份验证
EN

Stack Overflow用户
提问于 2012-10-15 08:42:22
回答 1查看 6.3K关注 0票数 2

我正在尝试使用Spring 3.1和REST开发一个示例应用程序。

在输入应用程序之前,有一个登录表单对用户进行身份验证。我希望使用REST进行基本身份验证,使用用户在登录表单中提供的凭据(用户名和密码)。

我的问题是,我不知道如何将REST用于基本身份验证。

我已经搜索了很多,但没有从哪里得到任何正确的教程,我可以解决我的错误。

请有人指点我或告诉我有什么好文章吗?

现在,我正在接受以下教程的帮助-- http://www.jpalace.org/docs/technotes/spring/rest-security.html,但是获得了空指针异常。

RestClient.java

代码语言:javascript
复制
import org.springframework.web.client.RestTemplate;


public class RestClient {

    RestTemplate restTemplate = new RestTemplate();
    static final String URL = "http://www.assembla.com/spaces/my_spaces";
    static final String username = "aaaaa";
    static final String password = "aaaaa";

    public RestClient() {

        BasicSecureSimpleClientHttpRequestFactory requestFactory = new BasicSecureSimpleClientHttpRequestFactory();
        requestFactory.setCredentialsProvider(new SimpleCredentialsProvider(
                new Credentials(username, password)));
        restTemplate.setRequestFactory(requestFactory);
    }

    public void exec() {
        System.out.println("restTemplate :::::::::::::::::: " + restTemplate);
        String response = restTemplate.getForObject(URL, String.class);
        System.out.println("Response:::::::::::::: " + response);
    }

}

BasicSecureSimpleClientHttpRequestFactory.java

代码语言:javascript
复制
import java.net.HttpURLConnection;
  import sun.misc.BASE64Encoder;


    public class BasicSecureSimpleClientHttpRequestFactory extends
            SecureSimpleClientHttpRequestFactory {

        public BasicSecureSimpleClientHttpRequestFactory() {
        }

        protected void prepareSecureConnection(HttpURLConnection connection) {
            if (credentialsProvider == null) {
                return;
            }
            Credentials credentials = credentialsProvider.getCredentials(null);
            String token = credentials.getUsername() + ":"
                    + credentials.getPassword();
            BASE64Encoder enc = new sun.misc.BASE64Encoder();
            String encodedAuthorization = enc.encode(token.getBytes());
            connection.setRequestProperty("Authorization", "Basic "
                    + encodedAuthorization);
        }
    }

SecureSimpleClientHttpRequestFactory .java

代码语言:javascript
复制
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URI;

import org.springframework.http.HttpMethod;
import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.client.SimpleClientHttpRequestFactory;

abstract public class SecureSimpleClientHttpRequestFactory extends
        SimpleClientHttpRequestFactory {

    protected CredentialsProvider credentialsProvider;

    public SecureSimpleClientHttpRequestFactory() {
    }

    public CredentialsProvider getCredentialsProvider() {
        return credentialsProvider;
    }

    public void setCredentialsProvider(CredentialsProvider credentialsProvider) {
        this.credentialsProvider = credentialsProvider;
    }

    @Override
    public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod)
            throws IOException {
        HttpURLConnection connection = openConnection(uri.toURL(), null);
        prepareConnection(connection, httpMethod.name());
        prepareSecureConnection(connection);
        return new SecureSimpleClientHttpRequest(connection);
    }

    abstract protected void prepareSecureConnection(HttpURLConnection connection);

}

SecureSimpleClientHttpRequest .java

代码语言:javascript
复制
import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.client.ClientHttpResponse;
public class SecureSimpleClientHttpRequest implements ClientHttpRequest {
    public SecureSimpleClientHttpRequest(HttpURLConnection connection) {
        // TODO Auto-generated constructor stub
    }
    @Override
    public HttpMethod getMethod() {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public URI getURI() {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public HttpHeaders getHeaders() {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public OutputStream getBody() throws IOException {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public ClientHttpResponse execute() throws IOException {
        // TODO Auto-generated method stub
        return null;
    }
}

SimpleCredentialsProvider .java

代码语言:javascript
复制
public class SimpleCredentialsProvider implements CredentialsProvider {

    private Credentials credentials;

    public SimpleCredentialsProvider(Credentials credentials) {
        super();
        this.credentials = credentials;
    }

    @Override
    public Credentials getCredentials(String str) {

        return credentials;
    }

}

CredentialsProvider .java

代码语言:javascript
复制
public interface CredentialsProvider {

    public Credentials getCredentials(String str);
}

Credentials.java

代码语言:javascript
复制
public class Credentials {

    private String username;
    private String password;

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

我收到以下错误:

2012年10月16日12:56:04 PM org.apache.catalina.core.StandardWrapperValve invoke : Servlet.service() for servlet spring在org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:444) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:409) at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:207)上抛出异常java.lang.NullPointerException

EN

回答 1

Stack Overflow用户

发布于 2012-10-15 08:58:04

一种方法是,如果您已经使用spring,那么将它与Security结合使用:http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity.html

因为它以各种方式支持基本身份验证:http://static.springsource.org/spring-security/site/docs/3.1.x/reference/ns-config.html#ns-form-and-basic

还请看一看本文,了解如何将其与REST一起使用:http://www.baeldung.com/2011/11/20/basic-and-digest-authentication-for-a-restful-service-with-spring-security-3-1/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12892009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档