Я разрабатываю приложение REST, которое использует платформу Джерси. Я хотел бы знать, как я могу управлять аутентификацией пользователя. Я искал много мест, и самая близкая статья, которую я нашел, является этим: http://weblogs.java.net/blog/2008/03/07/authentication-jersey.
Однако эта статья может только использоваться с сервером GlassFish и приложенной базой данных. Есть ли так или иначе, что я могу реализовать интерфейс на Джерси и использовать его в качестве фильтра прежде, чем достигнуть требуемого ресурса REST?
Я хочу использовать стандартную аутентификацию прямо сейчас, но это должно быть достаточно гибко таким образом, что я могу изменить это в более позднее время.
Я успешно использую Spring Security для защиты моего API на основе Джерси. Он имеет подключаемые схемы аутентификации, позволяющие вам позже переключиться с обычной аутентификации на что-то другое. Я не использую Spring вообще, только для обеспечения безопасности.
Вот соответствующая часть из моего web.xml
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/security-applicationContext.xml,
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!-- Enables Spring Security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<init-param>
<param-name>targetBeanName</param-name>
<param-value>springSecurityFilterChain</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Вы можете оставить applicationContext.xml пустым (
Я работаю над чем-то похожим на это. В моей реализации у нас есть внешний интерфейс Apache httpd для обработки базовой аутентификации HTTP, и он просто пересылает все запросы с некоторой информацией заголовка, содержащей пользователя и роли.
Исходя из этого, я работаю над синтаксическим анализом этих частей, используя фильтр сервлетов , чтобы обернуть HttpServletRequest
, используя сообщение, которое я нашел на CodeRanch . Это позволяет мне использовать аннотации javax.annotation.security
, такие как @RolesAllowed
, для каждого ресурса, который я хочу фильтровать. Однако, чтобы заставить все эти части работать, мне пришлось добавить следующее к моему сервлету в web.xml
:
<servlet>
<!-- some other settings and such
... -->
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory</param-value>
</init-param>
...
</servlet>
Вы можете найти ответ Эрика Варринера на недавний интересный пост: Джерси, Tomcat и аннотации по безопасности