【问题标题】:Simple authentication for a Java servlet running in Geronimo在 Geronimo 中运行的 Java servlet 的简单身份验证
【发布时间】:2014-05-09 05:19:15
【问题描述】:

我现在正在研究如何向 Java servlet 添加身份验证。我发现this 示例展示了如何对 servlet 使用身份验证,但这是针对 Tomcat 实现的。我们的生产环境使用 Geronimo。我怎样才能在 Geronimo 中完成同样的事情?

抱歉,前几天刚刚学习了有关 Geronimo 的基础知识,但还没有从高层次上找到如何要求对在 Geronimo 中运行的 servlet 进行身份验证。

【问题讨论】:

  • 您是否正在寻找 Geronimo 支持的任何基于 J2EE 的身份验证?
  • 对于初学者,我想做一个简单的用户文件,如我发布的示例中所述。在该示例中,他们建议将用户添加到 tomcat-users.xml 文件中。这是我想要开始工作的伟大的第一步(至少对我来说,因为我对此原型没有其他身份验证方法)。
  • 除了设置(tomcat用户文件)外,其他都一样。
  • @LeosLiterak - 那么我应该在哪里列出 Geronimo 中的用户和密码?问题就在于此 - 我不确定在 Geronimo 中我是如何做到的。
  • 您可以创建一个数据库并将用户表放在您将存储用户名和密码的位置。因此,您可以使用用户名和密码检查表来查询表。这是非常常见的方式(没有 Geronimo 耦合)

标签: java tomcat authentication servlets geronimo


【解决方案1】:

您需要在geronimo-web.xml 中配置它。 web.xml 与您提供的示例类似。

这里的资源展示了它的大部分内容:

http://geronimo.apache.org/GMOxDOC20/web-application-security-sample.html

在本例中,userpassword 在数据库中。

但可以在geronimo-web.xml (http://geronimo.apache.org/xml/ns/security-1.1) 中同时配置两者


已编辑

此链接还提供有关管理 users / groups / realms 的信息。

http://geronimo.apache.org/GMOxDOC20/administering-users-and-groups.html

【讨论】:

  • 所有 servlet 容器都为您提供 BASIC 和基于表单的身份验证实现。 @edubriguenti 为您提供了 geronimo 的相关文档链接。大多数情况下,这将很好地满足您的目的 - 零行代码。
【解决方案2】:

您可以使用pac4j library 来方便您的工作。 pac4j 支持多种身份验证机制(表单、Facebook、CAS...)。

您的问题似乎表明您正在寻找一些简单的机制,例如表单或 http 基本身份验证。在这种情况下,您只需要实现UsernamePasswordAuthenticator 接口并依赖例如包含用户名/密码对的文件。请记住在通过网络提交凭据时始终使用 HTTPS 以保存机密性和完整性。

查看j2e demo webapp,了解 pac4j 如何在 j2e 环境中集成。

【讨论】:

    【解决方案3】:

    使用安全过滤器,它们是在 servlet 中实现身份验证的最佳方式, 每个链接的简单身份验证都是这样的(在 web.xml 中)

    <filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>com.nawab.filters.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>/* </url-pattern>
    </filter-mapping>
    

    如果您使用约定 .do 进行操作,则仅对操作使用过滤器(在 web.xml 中)

    <filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>com.nawab.filters.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping>    
    

    你需要在com.nawab.filters中创建一个Class LoginFilter(web.xml中映射的地址) 代码将在它的 doFilter() 方法中编写为 LoginFilter.class

        public class LoginFilter implements Filter {
    public void init(FilterConfig arg0) throws ServletException {
    }
    
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
    
        HttpServletResponse httpRes = (HttpServletResponse) response;
        String ipAddress = request.getRemoteAddr();
        // your ipAddress
        String yourIpAddress = "192.168.1.xxx";
        // name you want to authenticate
        String name = "nawab";
        // ip address validation
        if (!request.getParameter(ipAddress).equals(yourIpAddress)) {
            httpRes.sendRedirect("wrongIp.jsp");
        }
        if (!request.getParameter("fname").equals(name)) {
            httpRes.sendRedirect("index.jsp");
        }
        chain.doFilter(request, response);
    }
    
    public void destroy() {
    }}
    

    这里 chain.doFilter(request, response); 让我们顺其自然;否则用户将被重定向到相应的 jsp。

    【讨论】:

    • 密码存储在哪里?另外,这是否将用户名作为纯文本发送,对吗?如果是这样,您将如何保护流量并对其进行加密?
    • 用于用户名安全性- 1.使用 POST 协议,用户名不会在 URL 中发送。 2.发送前加密用户名(通过javascript)并发送加密用户名,从数据库中获取加密版本并进行比较。对于密码- 1.您必须在数据库中存储加密密码,显然您将从数据库中获取密码并进行比较。(这是一个让您了解流程的示例,否则一切都可以在 doFilter() 中完成,就像在 Java 中一样,我们作为开发人员每天都在做这些事情。:))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多