Jsp Tomcat 8-表单登录页的直接引用无效

Jsp Tomcat 8-表单登录页的直接引用无效,jsp,tomcat,authentication,jakarta-ee,Jsp,Tomcat,Authentication,Jakarta Ee,我正试图通过使用j_security_控件为webapp设置登录功能,但最近当我登录时,我从标题中得到了错误。以下是相关的登录jsp: <div class="loginContainer"> <form role="form" method="POST" action="<%=request.getContextPath()%>/j_security_check"> <c:if test="${not empty

我正试图通过使用j_security_控件为webapp设置登录功能,但最近当我登录时,我从标题中得到了错误。以下是相关的登录jsp:

<div class="loginContainer">
        <form role="form" method="POST" action="<%=request.getContextPath()%>/j_security_check">
            <c:if test="${not empty param.Retry}">
                <div class="errorText">
                    <p>Login failed.  Please try again.</p>
                </div>
            </c:if>
            <div class="username">
                <label class="loginText" for="inputUser">User</label>
                <input type="text" class="form-control" id="inputUser" placeholder="Username" name="j_username" autofocus>
            </div>
            <div class="password">
                <label class="loginText" for="inputPassword">Password</label>
                <input type="password" class="form-control" id="inputPassword" placeholder="Password" name="j_password">
            </div>
            <div>
                <button type="submit" class="btn loginButton" id="loginButton">Login</button>
            </div>
        </form>
    </div>

登录失败。请再试一次

使用者 密码 登录
它是从这样的头调用的:

<c:choose>
    <c:when test="${not empty pageContext.request.userPrincipal}">
        <a id="logout" href="${base}/jsp/login/logout.jsp"
           class="fse-hid-small navbartext"
           data-ng-class="{'selected': idSelected === 'logout'}"
           title="Goodbye!">LOGOUT</a>
    </c:when>
    <c:otherwise>
        <a id="login" href="${base}/jsp/login/login.jsp"
           class="fse-hid-small navbartext"
           data-ng-class="{'selected': idSelected === 'login'}"
           title="Login Here!">LOGIN</a>
    </c:otherwise>
</c:choose>

并在web.xml中定义:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>InternalUserRole</web-resource-name>
        <url-pattern>/jsp/internal/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>InternalUser</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/jsp/login/login.jsp</form-login-page>
        <form-error-page>/jsp/login/login.jsp?Retry=True</form-error-page>
    </form-login-config>
</login-config>

内部用户角色
/jsp/internal/*
内部用户
保密的
形式
/jsp/login/login.jsp
/jsp/login/login.jsp?重试=True

这是工作前一段时间,不幸的是,我不知道什么时候坏了。无论如何,我都能做到这一点吗?

鉴于没有其他人有解决方案,我设法找到了一个黑客解决方案来解决这个可怜的tomcat安全问题

  • 创建一个重定向到根页面的简单servlet
  • 创建一个web资源集合条目,使servlet页面安全并需要一个角色
  • 使登录页面的链接指向您创建的servlet

  • 当你点击该链接时,你将被重定向到你想要进入的登录页面。登录后,您将被重定向到根索引页面。这是一个简单的方法,可以绕过一个令人讨厌的安全性错误,而这个错误甚至没有任何帮助。

    鉴于没有其他人有解决方案,我设法找到了一个黑客解决方案,解决了这个糟糕的tomcat安全性问题

  • 创建一个重定向到根页面的简单servlet
  • 创建一个web资源集合条目,使servlet页面安全并需要一个角色
  • 使登录页面的链接指向您创建的servlet

  • 当你点击该链接时,你将被重定向到你想要进入的登录页面。登录后,您将被重定向到根索引页面。一种简单的方法,可以绕过一个令人讨厌的安全错误,甚至没有任何帮助。

    我曾尝试清除缓存并对URL进行编码,但我也遇到了同样的问题。我尝试进行安全重定向,这会导致本地主机拒绝连接错误。我尝试清除缓存并对URL进行编码,但我遇到了同样的问题。我尝试了安全重定向,这给了我一个本地主机拒绝连接错误