登录功能优化
上篇登录功能代码在从数据库取出用户信息的代码中少写了取出用户姓名,现在将其加上user.setName(rs.getString("u_name"));
在登录成功后右上角会有一个xx用户,我们希望把用户名字显示在xx上,所以对其admin.jsp页面进行一些代码的调整
在LoginServlet中我们已经把从数据库中查出的用户信息保存在了session中
因此我们只需要再将用户信息中的用户姓名从session中取出来就可以了
将前台页面的xx修改成<%=((User)session.getAttribute(Constants.USER_SESSION)).getName()%>
将用户名输出处理
,然后登录就可以看到用户姓名已经显示在前台页面了
注销登录
在上篇也讲到到过滤器来防止用户非法登录,但是我们却将主页面放在了webapp的根目录下,而在web.xml中非法访问的访问路径是view目录下的全部,所以我们将主页面重新放在view的根目录下
当我们点击右上角的退出后,我们希望可以退出用户登录然后跳转到登录界面,在我们没有写这个功能时点击退出他可以跳转到登录页面,但我们在浏览器的地址栏中输入/view/admin.jsp他还是可以正常进入,这并不符合我们已经退出登录了
要实现退出登录,我们就可以直接将此时的用户的session
然后写注销登录的servlet
LogoutServlet
package com.wx.servlte.user;
import com.wx.util.Constants;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//移除用户的登录状态
req.getSession().removeAttribute(Constants.USER_SESSION);
resp.sendRedirect("login.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
很简单就两行代码
然后在web.xml中注册这个servlet
<servlet>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>com.wx.servlte.user.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
然后在前台界面退出按钮那里的请求目标login.jsp替换成servlet的请求路径/logout
这时候我们点击退出然后再次在浏览器的地址栏中输入/view/admin.jsp,他就会因为非法访问过滤器跳转到错误页面。因为并没有用户session存在,如果我们让没有用户信息的用户非法进入系统,那样是不安全的