【问题标题】:Implement basic Authentication for rest api using Jersey 2使用 Jersey 2 为 rest api 实现基本身份验证
【发布时间】:2015-04-20 09:03:54
【问题描述】:

我已经使用Jersey 2(Tomcat 服务器)公开了一些rest api,并使用ContainerRequestFilter 过滤器成功实现了Basic authentication(只需要身份验证的东西而不是授权)

public class AuthFilter implements ContainerRequestFilter{

    @Context
    HttpServletRequest request;

    @Override
    public void filter(ContainerRequestContext context)  {
     ............................
     //getting username/password authorization header and validating

当我告诉我的领导时,他说不要使用过滤器,因为每次点击你的 rest api 时,这个过滤器都会被调用。因此,在容器级别实现基本的身份验证安全性。我使用的是 Tomcat 服务器。 在web.xml 中定义了这个

<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

他指的是上面的内容吗? 谁能指导我如何实施我的领导所说的方式?

【问题讨论】:

标签: java security rest tomcat7 jersey-2.0


【解决方案1】:

documentation gives you examples 关于如何通过 web.xml 进行配置。您需要使用属于领域的login-config 进行配置。然后,Web 容器负责根据 URL 模式保护资源。

  • 请注意,数据是通过 HTTP 标头以纯文本(以编码形式)发送的,因此您需要想办法确保不被窥探(如 HTTPS)。
  • 无论您是在过滤器还是容器上检查此标头,都不会减轻您进行检查所需的开销(这可能可以忽略不计,但我从未分析过代码的这一部分以引用数字)。

【讨论】:

  • 这里的境界是什么?另外,为了澄清我只需要进行身份验证部分而不是授权。
  • 领域可以是基于文件或基于数据库的身份验证存储。 tomcat-users.xml 是一个基于 XML 的文件领域。
  • 如何使用基于数据库的身份验证?在 conf/server.xml 中,我需要创建领域吗?另外,web.xml 中应该给出什么领域名称?
  • 看看DataSourceRealm。您可以选择任何领域名称。
  • 我成功实现了它..在点击休息 api 时,弹出对话框要求提供凭据..但我不想要它,而是我想使用邮递员之类的休息工具发送授权标头,高级休息客户端等...你能告诉我怎么做吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 2015-01-02
相关资源
最近更新 更多