泽西岛 REST 服务上的用户身份验证

2022-09-01 03:15:03

我正在开发一个REST应用程序,它使用泽西岛框架。我想知道如何控制用户身份验证。我搜索了很多地方,我发现的最接近的文章是这样的:http://weblogs.java.net/blog/2008/03/07/authentication-jersey

但是,本文只能与 GlassFish 服务器和附加的数据库一起使用。在到达请求的 REST 资源之前,我是否可以在 Jersey 中实现接口并将其用作筛选器?

我现在想使用基本身份验证,但它应该足够灵活,以便我可以在以后更改它。


答案 1

我成功地使用弹簧安全性来保护我基于泽西岛的API。它具有可插拔的身份验证方案,允许您稍后从基本身份验证切换到其他身份验证。我不是一般使用Spring,只是使用安全的东西。

这是我网上的相关部分.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 留空 (<bean></bean>)。可以在此处找到安全应用程序Context.xml的示例


答案 2

我正在研究类似的东西。在我的实现中,我们有Apache httpd前端来处理HTTP Basic身份验证,它只是转发所有请求,其中包含一些包含用户和角色的标头信息。

从那时起,我正在努力使用servlet过滤器来解析这些部分,以使用我在CodeRanch上找到的帖子来包装。这允许我像在要筛选的每个资源上使用注释一样。但是,为了让所有这些部分正常工作,我必须将以下内容添加到我的servlet中:HttpServletRequestjavax.annotation.security@RolesAllowedweb.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>

您可能会在最近一篇感兴趣的帖子中找到Eric Warriner的答案:Jersey,Tomcat和安全注释


推荐