Jam*_*mes 2 authentication servlets login java-ee web
我是Java EE的新手.我创建了一个登录表单和servlet来验证用户的凭据,但是当我getRemoteUser()在验证后用方法检查远程用户时,我的代码不显示用户名.
我的登录servlet是:
String uname,pass;
PreparedStatement ps=null;
uname=request.getParameter("uname");
pass=request.getParameter("pass");
ResultSet rs = null;
Connection con = null;
try {
con = prepareConnection();
String Query="select uname,email from passmanager where pass=?";
ps=con.prepareStatement(Query);
ps.setString(1,pass);
rs=ps.executeQuery();
while(rs.next())
{
if (uname.equals(rs.getString("uname")) || uname.equals(rs.getString("email")))
{
rs.close();
ps.close();
ps = null;
con.close();
con = null;
HttpSession session = request.getSession(true);
session.setAttribute("currentSessionUser",uname);
RequestDispatcher dis = request.getRequestDispatcher("/user.html");
dis.forward(request, response);
break;
}
}
}
catch(Exception e)
{
System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud)
如果有任何需要更改/修改,请告诉我并帮助我.....提前感谢.
它HttpServletRequest#getRemoteUser()是容器管理身份验证的一部分,它基本上只是一个简单的<security-constraint>XML配置条目web.xml.
但是你有一个完全自制的servlet,它实际上也做了很糟糕的数据库交互(它通过WHERE用户名和密码上的子句在Java中而不是在SQL中进行比较;此外它还会泄漏JDBC资源没有关闭它们finally).
你基本上有两个选择:
不要在家里进行身份验证.删除所有错误,低效和资源泄漏的代码并使用容器管理的身份验证.您可以在此答案中找到启动示例:仅限制对特定用户的JSP/Servlet访问
只需通过session.getAttribute("currentSessionUser")和/或${currentSessionUser}代替获取登录用户,然后生成servlet过滤器以进行访问限制.您可以在此答案中找到启动示例:使用Java中的过滤器验证用户名,密码(与数据库联系)
| 归档时间: |
|
| 查看次数: |
21220 次 |
| 最近记录: |