Tomcat JAASRealm 领域2

前面“Tomcat JAASRealm 领域”章节介绍怎样实现和开启 Tomcat 的 JAASRealm 领域验证,没有单独创建一个 web 程序,而是直接使用 Tomcat 的 Manager 项目来验证 JAASRealm 是否可用。本章节将介绍怎样在我们自己的 web 程序中使用 JAASRealm 验证。

当我们访问由 Tomcat 部署的 Web 应用中受保护的资源时,容器管理的验证方法可以控制确认用户身份的方式。Tomcat 支持四种容器管理的安全防护,分别如下:

  • BASIC(基本验证):通过HTTP验证,需要提供 base64 编码文本的用户口令

  • DIGEST(摘要验证):通过HTTP验证,需要提供摘要编码字符串的用户口令

  • FORM(表单验证):在网页的表单上要求提供密码

  • CLIENT-CERT(客户端证书验证):以客户端证书来确认用户的身份

下面将介绍 BASIC 和 FORM 类型的验证方式,另外两种方式读者自行试验。

FORM(表单验证)

创建 web 项目

使用 IDEA 创建一个简单的 web 项目,项目结构如下图:

其中:

  • index.jsp 主页

  • login.jsp 登录页面

  • error.jsp 错误页面

  • web.xml Web项目配置文件

创建登录页面

登录页面需要提供一个表单(form)表单的 action 必须是 “j_security_check”,提交方法为 post。并且,用户名输入框的 name 必须为 j_username,密码输入框的 name 必须为 j_password。html 代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <form method="post" action="j_security_check">
        <p>
            用户名:<input type="text" name="j_username" />
        </p>
        <p>
            密 码:<input type="password" name="j_password" />
        </p>
        <p>
            <button type="submit">登录</button>
        </p>
    </form>
</body>
</html>

创建错误页面

错误页面用于显示简单的错误信息,html 代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>错误</title>
</head>
<body>
    <p>用户名/密码不正确,登录失败!</p>
</body>
</html>

创建主页

主页只简单的显示标题信息,html代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>WEB_JAAS</title>
</head>
<body>
<h1>Web_JAAS</h1>
<p>
    <a href="<%=request.getContextPath()%>/myServlet">获取当前日期</a>
</p>
</body>
</html>

web.xml 配置

在 web.xml 文件中添加如下内容:

<security-constraint>
    <display-name>default</display-name>
    <!-- 需要限制访问的资源子集 -->
    <web-resource-collection>
        <web-resource-name>all files</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <!-- 指定可以访问该资源集合的用户角色,这里指定为 JAAS 中的角色 -->
    <auth-constraint>
        <role-name>manager-gui</role-name>
    </auth-constraint>
    <!-- 用来显示怎样保护在客户端和Web容器之间传递的数据 -->
    <!-- NONE 不需要传输保证 -->
    <!-- INTEGRAL 服务器和客户端之间的数据必须以某种方式发送,而且在传送中不能改变 -->
    <!-- CONFIDENTIAL 传输的数据必须是加密的数据 -->
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<!-- 配置登录方式为 form 方式 -->
<login-config>
    <!-- 指定验证方式 -->
    <auth-method>FORM</auth-method>
    <!-- 指定验证中使用的领域名,在 jaas.config 中配置的 -->
    <realm-name>MyRealm</realm-name>
    <form-login-config>
        <!-- 指定登录页面 -->
        <form-login-page>/login.jsp</form-login-page>
        <!-- 指定错误页面 -->
        <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

保存配置且重启 tomcat 服务,访问 http://localhost:8080/web_jaas  地址将跳转到登录页面,如下图:

输入用户名和密码,点击登录按钮。进入主页面,如下图:

BASIC(基本验证)

如果你想偷懒,不想编写登录页面,那么可以选择该种验证方式。当你访问受保护资源时,且没有登录授权,则浏览器会弹出用户名密码输入框。

首先,修改 web.xml 文件,如下:

<security-constraint>
    <display-name>default</display-name>
    <!-- 需要限制访问的资源子集 -->
    <web-resource-collection>
        <web-resource-name>all files</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <!-- 指定可以访问该资源集合的用户角色,这里指定为 JAAS 中的角色 -->
    <auth-constraint>
        <role-name>manager-gui</role-name>
    </auth-constraint>
    <!-- 用来显示怎样保护在客户端和Web容器之间传递的数据 -->
    <!-- NONE 不需要传输保证 -->
    <!-- INTEGRAL 服务器和客户端之间的数据必须以某种方式发送,而且在传送中不能改变 -->
    <!-- CONFIDENTIAL 传输的数据必须是加密的数据 -->
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<!-- 配置登录方式为 BASIC 方式 -->
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>MyRealm</realm-name>
</login-config>

保存配置且重启 tomcat 服务,访问 http://localhost:8080/web_jaas  地址将弹出登录对话框,如下图:

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号