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.jsp
POST/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
请求传递。
我正在为我的应用程序使用 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.jsp
POST/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
请求传递。