⭐基于bootstap-Jquery-JSP-Servlet-mysql⭐博客项目——后台用户退出过程和过滤器管理后台的权限验证实现

Posted stormzhuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了⭐基于bootstap-Jquery-JSP-Servlet-mysql⭐博客项目——后台用户退出过程和过滤器管理后台的权限验证实现相关的知识,希望对你有一定的参考价值。

前面文章实现了后台管理,这一篇文章主要实现后台用户退出过程和过滤器管理后台的权限验证

后台用户退出过程实现

在登录时,如果用户登录成功,则会把用户实体对象存放在session中,那么用户退出时,只需在session中删除用户实体对象

在controller的user包下创建AdminLogout.java,如下

@WebServlet("/manage/admin_logout")
public class AdminLogout extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/* 设置字符编码,解决中文乱码问题 */
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		// 获取session
		HttpSession session = request.getSession();
		// 删除session中的name对象
		session.removeAttribute("name");
		// 创建输出流
		PrintWriter out = response.getWriter();
		// 向客户端提示信息
		out.write("<script>");
		out.write("alert('退出成功!');");
		out.write("location.href= '" + request.getContextPath() + "/login.jsp'");
		out.write("</script>");
		out.close();
	}
}

首先获取到session对象,然后调用对象方法删除session中的属性,之后向客户端输出提示信息再跳转到登录页面

效果如下

过滤器管理后台的权限验证实现

后台的所有页面是需要登录才能访问的,所以我们要对所以访问后台页面的请求进行拦截,然后检查session中是否有用户实体对象,如果有则进行放行,没有则进行过滤

我们在前面说过访问后台所有页面是通过servlet间接访问的,直接访问是不允许的,因为我们把所有页面都放在了WEB-INF下,它是受服务器保护的,客户端是访问不了,只能服务器访问

那么我们只需拦截请求后台的所有servlet即可,而过滤器实现拦截的原理是通过路径的来拦截的

在前面中我们给后台所有servlet前面加了mange的路径标识

所有我们只需在过滤器中对所有包含manage路径标识的servlet进行拦截,之后就可以检查session中是否有用户实体对象了

左击java文件夹按Ctrl+N输入filter

输入存放过滤器的包名和类名后next


修改url映射,输入需要过滤的路径,我们需要过滤的是包含manage的,输入/manage/*即可,后finish


AdminLogin代码如下

@WebFilter("/manage/*")
public class AdminLogin implements Filter {
	public AdminLogin() {
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		/* 需要把请求和响应强转为http类型的 */
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		/* 设置字符编码,解决中文乱码问题 */
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=utf-8");
		// 获取session对象
		HttpSession session = req.getSession();
		// 获取session中的name属性的值,即用户对象
		User user = (User) session.getAttribute("name");
		if (user != null) {
			chain.doFilter(req, resp);
		} else {
			PrintWriter out = resp.getWriter();
			out.write("<script>");
			out.write("alert('请先登录!');");
			out.write("location.href='" + req.getContextPath() + "/login.jsp';");
			out.write("</script>");
			out.close();
			return;
		}
	}
	public void init(FilterConfig fConfig) throws ServletException {
	}
}

这样我们后台所有功能都实现了,后面就要来实现前台欢迎页面,资源浏览,帖子浏览,上传等了

以上是关于⭐基于bootstap-Jquery-JSP-Servlet-mysql⭐博客项目——后台用户退出过程和过滤器管理后台的权限验证实现的主要内容,如果未能解决你的问题,请参考以下文章

基于内容与基于协作的过滤?

为啥 Kafka 是基于拉的而不是基于推的?

推荐算法简介:基于用户的协同过滤基于物品的协同过滤基于内容的推荐

依存句法分析:基于图的依存句法分析基于转移的依存句法分析基于神经网络的依存句法分析

基于项目和基于内容的协同过滤有啥区别?

事件处理:基于功能的组件与基于类的组件