当前位置: 首页 > 知识库问答 >
问题:

使用JAAS登录后发现RES_NOT_FOUND

刁俊人
2023-03-14

我正在使用JAAS对访问我的web应用程序的受保护区域的用户进行身份验证。登录页面如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
<h:head>
    <meta http-equiv="Content-Type" content="text/html; UTF-8" />
    <title>Test</title>
</h:head>
<h:body>
    <ui:composition template="template/common/commonLayout.xhtml">
        <ui:define name="content">
            <form name="loginForm" method="post" action="j_security_check">
                <table>
                    <tr>
                        <td colspan="2">Login to the your application:</td>
                    </tr>
                    <tr>
                        <td>Select something:</td>
                        <td><h:selectOneMenu>
                                <f:selectItems value="#{loginScreenBean.listSomething}" />
                            </h:selectOneMenu><br /></td>
                    </tr>
                    <tr>
                        <td>Name:</td>
                        <td><input type="text" name="j_username" /></td>
                    </tr>
                    <tr>
                        <td>Password:</td>
                        <td><input type="password" name="j_password" /></td>
                    </tr>
                    <tr>
                        <td colspan="2"><input type="submit" value="Go" /></td>
                    </tr>
                </table>
            </form>
        </ui:define>
    </ui:composition>
</h:body>
</html>

我的web-xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>patchit</display-name>
  <welcome-file-list>
    <welcome-file>test.html</welcome-file>
  </welcome-file-list>
  <security-role>
    <role-name>admin</role-name>
  </security-role>
  <security-constraint>
    <display-name>Example Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>
      <url-pattern>/protected/*</url-pattern>
      <http-method>DELETE</http-method>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
      <http-method>PUT</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Example Form-Based Authentication Area</realm-name>
    <form-login-config>
      <form-login-page>/login.xhtml</form-login-page>
      <form-error-page>/login-error.xhtml</form-error-page>
    </form-login-config>
  </login-config>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
</web-app>

我的jaas配置如下所示:

CustomLogin {
    de.kungfuzius.test.security.SimpleLoginModule
    sufficient;
};

因此,当我在contextPath/protected/test.xhtml这样的受保护区域中打开一个页面时,我会看到带有登录表单的login.xhtml。点击submit按钮后,用户将得到身份验证,但不是转发/重定向到最初请求的页面,而是重定向到contextPath/protected/res_not_found。为了检查用户是否真的通过了身份验证,我再次尝试访问contextPath/protected/test.xhtml,但它起作用了。

非常感谢任何帮助。

谢谢!

共有1个答案

马哲
2023-03-14

哇,有趣的行为。我查看了使用fiddler的请求,发现了一个对context/protected/res_not_found的请求。此请求来自一个css文件,该文件在我的模板中被引用,但还不存在。

当我移除对样式表的引用时,它起作用了!!!

 类似资料:
  • 我有两个java webapps,它们运行在同一个jboss服务器上,但是在不同的域中: 主机:端口 1/上下文 1/ 主机:端口 2/上下文 2/ 两个网站的所有内容都通过使用JAAS登录模块进行保护。我现在想在app1中创建一个按钮,以转到app2上的页面。正如预测的那样,我会看到app2的登录屏幕。我可以成功登录。 然而,两个Web应用程序上的用户实际上是相同的。这意味着对app1有效的用户

  • 尝试按照配置文档使用JAAS向hawtio添加身份验证 通过使用jetty的demo base test jaas war来配置基本jaas/jetty登录,并能够进行身份验证/授权。 通过阅读文档,我试图将同样的概念融入hawtio,但我确信它甚至没有触及ldap,因为当我在演示战中尝试这一点时,我会得到类似的日志 我决定暂时忽略授权,尝试使用ldap进行身份验证。如果有人对我如何进一步调试这个

  • 有人可以使用jaas登录模块吗。我在看医生 我想是这些登录模块可以1.与OS用户进行身份验证2.提供该用户的组。 基本上我想通过操作系统进行身份验证。输入用户名和密码 我想用windows进行身份验证 我不想做LDAP认证只做os认证。 对于windows,有华夫饼干库可用。但我无法在使用64位机器时进行身份验证。在32位上运行良好。 对于linux,有jpam,但它不提供组。它只会检查用户名、密

  • 我正在尝试开发一个定制的JAAS登录模块,它使用一个令牌并从不同的来源获取用户数据。它应该作为wildfly 8.2.1 final的身份验证领域。我有一个测试servlet,我想在其中进行身份验证,以便检查注入EJB的允许角色。 这个网站的测试:http://www.radcortez.com/custom-principal-and-loginmodule-for-wildfly/事实上,我甚

  • 使用基于表单的JAAS、MySQL、Apache TomEE、JSP、Servlet 我知道如何配置基于表单的JAAS,当用户试图访问安全页面时,自动将用户重定向到登录页面。基本上,我已经为TomEE和MySQL配置了JDBC领域(在文件中),在中,我已经声明了、和。 然后,有以下登录表单: 而且,这对于在web.xml中的标记中声明的页面很好。 但是,我想有明确的访问一个页面,用户可以登录。那么

  • 我有一个使用SpringMVC的Java网络应用程序。该 Web 应用程序在 jboss AS7.1 服务器上运行,该服务器使用带有表单认证的 JAAS 登录模块。当用户在表单上填写其用户名和密码时,登录工作顺利。 我现在想创建一个java控制器,它“将用户登录”,就好像用户填写了日志通知一样。 当上述方法完成时,应允许对任何安全页面的任何访问,因为用户被视为已登录。 可以通过访问Jboss的lo