tomcat 8 security Form based authentication auto-login

tomcat 8 security Form based authentification auto-login

我正在为我的应用程序使用 tomcat 8 表单基本身份验证安全性。在 web.xml:

<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/login-failed.html</form-error-page>
    </form-login-config>
</login-config>

有没有办法把username&password通过URL直接传给login.jspPOST/GET

我正在尝试将我的应用程序连接到另一个应用程序,因此我希望用户能够直接登录而无需再次输入凭据。因此,我通过 post 请求将用户名和凭据从我的主应用程序传递到 login.jsp

<script language="javascript">
<%
String username= (String)request.getParameter("username");
String password= (String)request.getParameter("password");
System.out.println("username========="+((String)username));
System.out.println("password========="+((String)password));

%>
function autologin(){
    document.forms[0].j_username.value = "<%=username%>";
    document.forms[0].j_password.value = "<%=password%>";
    document.forms[0].submit();
}
</script>

<body onload = "javascript:autologin()">
<form method="POST" name="loginform" action="j_security_check">
    <table>
        <tr>
            <td colspan="2">Loading.......</td>
        </tr>
        <tr>
            <td><input type="hidden" name="j_username" /></td>
        </tr>
        <tr>
            <td><input type="hidden" name="j_password"/ ></td>
        </tr>
        <tr>
            <td colspan="2"><input type="hidden" value="Go" /></td>
        </tr>
    </table>
</form>
</body>

我的目标是像这样传递凭据:

http://localhost:8080/myApp/login.jsp?username=user&password=password

但我收到以下错误:

HTTP Status 400 - Invalid direct reference to form login page

但是,用户名和密码打印正确,这意味着它们已通过。 显然,我们无法直接访问登录表单。 那么是否有任何解决方法或者我的代码中是否有一些东西 incorrect/missing?

编辑 1:

javascript 中的 form.submit() 有效。我尝试在 login.jsp 页面中对用户名和密码进行硬编码:

<%
String username="user";
String password="password";
%>

然后,直接点击 http://localhost:8080/myApp/ 将我带到应用程序。唯一的问题是我无法直接从 URL.

访问 login.jsp 页面

据我了解,人们根本无法将浏览器指向登录页面,因为无法告诉它下一步去哪里!登录页面的操作是一个内置进程,而不是 servlet 或 JSP 然后可以将您带到下一页。

登录工具背后的想法是,由于用户可以跳转到具有独特 URL 的 Web 应用程序的任何部分,从而绕过登录页面,整个登录过程被移到 Web 应用程序外部因此,如果有人访问 webapp 但他们尚未登录,则截取原始 URL,显示登录表单,并且如果(且仅当)登录成功,原始 URL 将是呈现。 因此,我们不能直接通过URL直接传递变量或直接进入login.jsp。如果用户未登录,则在访问应用程序时,tomcat 本身会重定向到登录表单(在 web.xml 中提到)。

但是,在这种情况下,我找到了解决方法。而不是将参数传递给登录页面,而是像这样直接将其传递给应用程序:

http://localhost:8080/myApp/?username=user&password=password

让我们可以直接登录应用程序,而无需在表单中手动输入凭据。同样可以通过来自不同应用程序的 POST 请求传递。