【问题标题】:j_security_check called directlyj_security_check 直接调用
【发布时间】:2013-05-21 01:03:20
【问题描述】:

我有一个 Web 应用程序,我希望主页包含登录表单以及其他数据。如果用户选择登录,他应该被重定向到另一个页面(例如 login_success.jsp)。我的问题是:我可以使用 j_security_check 机制登录还是唯一的方法是使用托管 bean 来处理登录?

我的主页是这样的:

....
    <form action="j_security_check" method="POST" name="loginForm">
        <h:panelGrid columns="2">
            <h:outputLabel id="userNameLabel" for="j_username" value="#{label.home_username}:" />
            <h:inputText id="j_username" autocomplete="off" />
            <h:outputLabel id="passwordLabel" for="j_password" value="#{label.home_password}:" />
            <h:inputSecret id="j_password" autocomplete="off" />

            <h:panelGroup>
                <h:commandButton type="submit" value="Login" />
                <h:commandButton type="reset" value="Clear" />
            </h:panelGroup>
        </h:panelGrid>
    </form>
...

如果我按下登录按钮,我会得到 -> HTTP 状态 400 - 对表单登录页面的直接引用无效。很明显,j_security_check 机制不知道“重定向”到哪里,因为我之前没有请求受保护的资源。

【问题讨论】:

标签: jsf login j-security-check


【解决方案1】:

HTTP 状态 400 - 对表单登录页面的直接引用无效。

这意味着您在不允许的情况下通过直接请求手动打开了 &lt;form-login-page&gt;


很明显,j_security_check 机制不知道“重定向”到哪里,因为我之前没有请求受保护的资源。

这不是错误试图告诉你的。


将登录页面放在/WEB-INF 文件夹中,以防止可能的直接访问。然后,要触发登录,只需直接请求受限资源即可。如果需要,容器会自动显示登录页面。

或者,如果您没有受限资源(即登录仅显示更多选项/功能,例如在讨论论坛中),则不要使用 &lt;form-login-page&gt;,而是使用带有调用 HttpServletRequest#login() 的支持 bean。

另见:

【讨论】:

  • 但是如果表单页面是我的主页并且表单包含在表单页面中我不能将它放在/WEB-INF中以防止可能的直接访问,我希望直接访问
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2011-07-15
相关资源
最近更新 更多