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

时间:2016-08-03 16:39:05

标签: jsp tomcat authentication java-ee

我正在尝试使用j_security_control为webapp设置登录功能,但是最近当我登录时,我从标题中得到了错误。这是相关的登录jsp:

var brs = $('.beers');

brs.each(function(i) {
  if ((i + 1) % 5 == 0) {
    $('<div class="divider"></div>').insertAfter(brs[i]);
  }
});

它是从标题中调用的:

<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>

并在web.xml中定义:

<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>

不幸的是,这是在不久前工作的,我不知道什么时候它破了。无论如何我还能做这个工作吗?

1 个答案:

答案 0 :(得分:0)

看到没有其他人有解决方案,我设法了一个hacky解决方案来解决这个糟糕的tomcat安全问题。

  1. 创建一个重定向到根页面的简单servlet。
  2. 创建一个web-resource-collection条目,使该servlet页面安全并需要一个角色。
  3. 使您指向登录页面的链接指向您创建的servlet。
  4. 当您点击该链接时,您将被重定向到您想要访问的登录页面。登录后,您将被重定向到根索引页面。一种解决令人难以置信的恼人安全错误的简单方法,甚至没有帮助。