HTTP-аутентификация на Джерси: Как я могу получить доступ и HTTP-аутентификацию в URL-адресе Джерси? - PullRequest
1 голос
/ 05 декабря 2011

Я пишу веб-сервис Restful с Джерси, это пример кода:

@GET
@Produce(MediaType.APPLICATION_JSON)
public String findItems(){

...
}

и URL-адрес findItem - localhost: 8080 / items метод должен проверять информацию http-аутентификации (дайджест или основную) этого URL-адреса перед извинениями, как сначала получить доступ к аутентификации из запроса url?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Я бы не помещал это в сам контроллер, а в com.sun.jersey.spi.container.ContainerRequestFilter вокруг классов ресурсов, которые вы хотите защитить, но должен дать вам основную идею.

@Context
private HttpServletRequest request;

@GET
@Produce(MediaType.APPLICATION_JSON)
public String findItems(){
    String auth = request.getHeader("authorization");
    if (auth != null) {
        String basic_prefix = "Basic ";
        if (auth.startsWith(basic_prefix)) {
            String auth_data = new String(Base64.decode(auth.substring(basic_prefix.length())));
            String [] user_and_key = auth_data.split(":", 2);
            // user and password available here
        } else {
            // reject access
        }
    } else {
        // reject access
    }
}                   
0 голосов
/ 07 декабря 2011

Обычно аутентификация выполняется контейнером, вам просто нужно добавить соответствующее ограничение в web.xml, чтобы указать, какой Uris должен быть защищен и какой тип аутентификации требуется. Затем в Джерси вы можете получить информацию о ролях и принципале из SecurityContext, который вы можете добавить к своему ресурсу.

...