我有一个使用j_security_check
的JSP Web应用程序。如果我知道用户名和密码,是否可以通过JSP页面以编程方式将特定用户登录到j_security_check
?我试图以这种方式将变量作为URL参数传递......
response.sendRedirect(www.mydomain.com/j_security_check?j_username=someUserName&j_password=somePassword )
......但它不起作用。有没有办法做到这一点?
编辑: 这是我的登录页面,现在工作正常。出于安全原因,我修剪了一些代码。
<form name="signon" method="post" action="/j_security_check">
<table width="100%" cellpadding="4" cellspacing="0">
<tr>
<td valign="top" colspan="4">
<h2><%= UI.tr(null, "login_details") %>
</h2>
</td>
</tr>
<tr>
<td valign="top" width="150px">
<%= UI.tr(null, "login_id") %>
</td>
<td valign="top" width="150px">
<%= UI.tr(null, "login_pass") %>
</td>
<td valign="top" width="150px">
<%= UI.tr(null, "login_token_or_captcha") %>
</td>
<td width="100%"> </td>
</tr>
<tr>
<%
if (logins == null) {
%>
<td>
<input type="hidden" name="j_uri" value="/index.jsp">
<input type="text" id="username" name="j_username" size="16" style="width: 150px;" autocomplete="off" <%= username == null ? "" : "disabled value='" + username + "'" %> onblur="return checkCaptcha();">
</td>
<%
} else {
%>
<td>
<select name="j_username" style="width: 150px;">
<%
for (Login login : logins) {
%>
<option><%= login.getUsername() %>
</option>
<%
}
%>
</select>
</td>
<%
}
%>
<td><input type="password" name="j_password" size="16" style="width: 150px;"> </td>
<td><input type="text" id="mypw" name="mypw" size="16" autocomplete="off" style="width: 150px;"></td>
<td><input class="submit" type="submit" name="submit" value="<%= UI.tr(null, "login_submit") %>"></td>
</tr>
<tr>
<td valign="top" colspan="4">
<%-- <%
if("registry.nic.hn".equals(request.getServerName())) {
%>
<!-- GARTH - put whatever you want here for .HN -->
<% } else { %> --%>
<h2><%= UI.tr(null, "login_news") %>
</h2>
<div><%= HTMLFormat.addBreaks(SiteConf.getSiteConf().getNews()) %>
</div>
<%-- <% } %> --%>
</td>
</tr>
答案 0 :(得分:3)
以下代码适用于JSP文件:
String url = "j_security_check?j_username=" + username + "&j_password=" + password;
String redirectUrl = response.encodeRedirectURL(url);
response.sendRedirect(redirectUrl);
答案 1 :(得分:2)
在我的观看中,通过附加j_security_check
和username
使用password
网址登录似乎是一个很大的安全可靠性。
相反,您可以执行以下步骤:
j_security_check
网址上发布,用户名和密码通过这种方式,它将是安全的。
答案 2 :(得分:1)
您声明要以编程方式登录。如果这是你的目标,我会避免使用j_security_check。 j_security_check与基于表单的身份验证一起使用(在安全Web应用程序上查看此Oracle资源 - 表单身份验证大约有一半的时间:http://docs.oracle.com/cd/E24329_01/web.1211/e24485/thin_client.htm)。
我建议你看一下这个资源并深入研究一些替代方案,但另一种方法是使用Java身份验证和授权服务(JAAS)API(这是一个教程链接:http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html JAAS和回调处理程序是以编程方式解决身份验证(和授权)的非抽象方式。许多强大的框架都基于这个JAVA API,所以如果你仍然在努力解决这个问题,可能值得一看。
答案 3 :(得分:0)
您可以让用户在jsp页面和servlet上输入用户名和密码,或者按照here所述使用facelets页面和bean来登录用户。