![在 Glassfish 中管理用户角色](https://linux22.com/image/564576/%E5%9C%A8%20Glassfish%20%E4%B8%AD%E7%AE%A1%E7%90%86%E7%94%A8%E6%88%B7%E8%A7%92%E8%89%B2.png)
我正在开发一个小型 Web 应用程序用于学习。我想使用控制器 servlet 来重定向用户的请求并控制它们。为此,我在 web.xml 中执行以下映射:
<servlet>
<servlet-name>ServletController</servlet-name>
<servlet-class>servlet.ServletController</servlet-class>
</servlet>
<servlet>
<servlet-name>IndexJSP</servlet-name>
<jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>ServletController</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>IndexJSP</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
然后我需要允许我的控制器访问其他 jsp,以将用户重定向到不同的页面。在 Bruce W. Perry 的书中,作者建议以这种方式将 security-constrain 添加到 web.xml 中:
<security-constraint>
<display-name>ConstraintIndex</display-name>
<web-resource-collection>
<web-resource-name>IndexJSP</web-resource-name>
<description>Main page</description>
<url-pattern>/index.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>nullrole</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>nullrole</role-name>
</security-role>
“Nullrole” 是任何用户都不拥有的角色。它似乎工作正常:当用户尝试访问 index.jsp 时,系统会要求他输入登录名/密码,但控制器可以自由访问。尽管如此,我不明白当用户在浏览器中直接输入“index.jsp”时,在身份验证窗口中可以使用什么登录名和密码。正如我所看到的,Glassfish 中没有角色:有“file”和“admin-realm”等领域。所以,也没有“Nullrole”。有人能解释一下如何向 Glassfish 添加空角色以及如何使用它来限制任何人从浏览器直接访问页面吗?
答案1
我不完全理解你的问题,但如果你问如何添加更多角色并将它们映射到用户,这将回答你的问题:角色映射 JavaEE 安全模块
角色可以分配给多个用户或组。您可以使用角色来限制对页面的访问。
如果您想设置从哪里获取用户,您必须在 web.xml 中添加如下内容:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>siteSecurity</realm-name>
<form-login-config>
<form-login-page>/pages/login.jsp</form-login-page>
<form-error-page>/pages/login.jsp?retry=true</form-error-page>
</form-login-config>
</login-config>
您必须在 glassfish 中添加您的 siteSecurity 领域。
有关如何执行此操作的有用链接:如何创建领域