JAX-RS и пользовательская авторизация - PullRequest
6 голосов
/ 25 февраля 2011

Я пытаюсь защитить конечную точку JAX-RS и в настоящее время пытаюсь выяснить, как работают аутентификация и авторизация.Большинство примеров довольно просты, так как они связаны только с ролью сервера приложений Java EE через web.xml.

Мне интересно, как использовать что-то еще, кроме ролей Java EE AS.Например: я хотел бы использовать сессию или какой-то токен (или какой-то идентификатор).

Ответы [ 2 ]

7 голосов
/ 29 марта 2011

Все зависит от используемой вами реализации JAX-RS.Я использую Джерси на встроенной Jetty .

SecurityHandler sh = new SecurityHandler();

// the UserRealm is the collection of users, and a mechanism to determine if
// provided credentials are valid
sh.setUserRealm(new MyUserRealm());

// the Authenticator is a strategy for extracting authentication credentials
// from the request. BasicAuthenticator uses HTTP Basic Auth
sh.setAuthenticator(new BasicAuthenticator());

См. Как настроить безопасность с помощью Embedded Jetty

Если у вас есть Principal в HttpServletRequest, вы можете вставить их в контекст запроса JAX-RS.

public abstract class AbstractResource {
    private Principal principal;
    @Context
    public void setSecurityContext(SecurityContext context) {
        principal = context.getUserPrincipal();
    }
    protected Principal getPrincipal() {
        return principal;
    }
}

@Path("/some/path")
public class MyResource extends AbstractResource {
    @GET
    public Object get() {
        Principal user = this.getPrincipal();
        // etc
    }
}
2 голосов
/ 26 марта 2013

Отказ от ответственности: не изменяйте свою собственную структуру безопасности, если только она вам действительно не нужна.

Посмотрите, что делает OAuth-фильтр в Джерси.Он читает заголовок Authorization, который содержит учетные данные в другом формате, чем обычно понимаемый (HTTP Basic).Эти учетные данные превратятся в роли, которые затем можно будет использовать для обеспечения безопасности (@RolesAllowed), если вы добавите фильтр Roles Allowed Filter , который фактически обеспечивает выполнение.Попробуйте посмотреть, как работают эти фильтры.

...