我现在正在研究如何向 Java servlet 添加身份验证。我发现这个示例展示了如何对 servlet 使用身份验证,但这是针对 Tomcat 实现的。我们的生产环境使用 Geronimo。我怎样才能在 Geronimo 中完成同样的事情?
抱歉,前几天刚刚学习了有关 Geronimo 的基础知识,但尚未从高层次上找到如何要求对在 Geronimo 中运行的 servlet 进行身份验证。
您需要在geronimo-web.xml
. 这web.xml
与您提供的示例类似。
这是一个显示大部分内容的资源:
http://geronimo.apache.org/GMOxDOC20/web-application-security-sample.html
在此示例中,用户和密码位于数据库中。
但是可以在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
您可以使用pac4j 库来方便您的工作。pac4j 支持多种身份验证机制(表单、Facebook、CAS...)。
您的问题似乎表明您正在寻找一些简单的机制,例如表单或 http 基本身份验证。在这种情况下,您只需要实现UsernamePasswordAuthenticator
接口并依赖于例如包含用户名/密码对的文件。请记住,在通过网络提交凭据时始终使用HTTPS以保存机密性和完整性。
查看j2e 演示 webapp以了解 pac4j 如何在 j2e 上下文中集成。
使用安全过滤器,它们是在 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 中创建一个类 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。