运用学过的拦截器知识,实现一个后台系统登录验证的案例
后台系统登录验证的流程图:
了解了案例的验证规则,接下来就在项目中实现后台系统登录验证,具体实现步骤如下所示。
创建User类,在User类中,声明username和password属性,分别表示用户名和密码,并定义了每个属性的getter/setter方法。
public class User {
private String username; //用户名
private String password; //用户密码
// 省略getter/setter方法
}
@Controller
public class UserController {
// 跳转到系统首页,跳转到登录页面,跳转到订单信息页面,用户登录省略
@RequestMapping("/logout")
public String logout(HttpSession session) {// 用户退出
session.invalidate(); // 清除Session
return "redirect:tologin"; // 退出登录后重定向到登录页面
}
}
// 对用户登录的相关请求,放行
if(uri.indexOf(“/login")>=0) { return true; }
HttpSession session = request.getSession();
// 如果用户是已登录状态,放行
if(session.getAttribute(“USER_SESSION")!=null) { return true; }
// 其他情况都直接跳转到登录页面
request.setAttribute("msg", "您还没有登录,请先登录!");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp")
.forward(request,response);
<!-- 配置创建 spring 容器要扫描的包 --><context:component-scan basepackage="com.itheima.controller"/><mvc:annotation-driven/> <!-- 配置注解驱动 --><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean><mvc:interceptors> <!-- 配置拦截器 --><bean class="com.itheima.interceptor.LoginInterceptor"/></mvc:interceptors><!-- 配置静态资源的访问映射,此配置中的文件,将不被前端控制器拦截 --><mvc:resources mapping="/js/**" location="/js/"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html><head><title>后台系统</title></head>
<body>
<li>您好:${ USER_SESSION.username }</li>
<li><a href=“${ pageContext.request.contextPath }/logout">退
</a></li>
<li><a href="${ pageContext.request.contextPath }/orderinfo">
订单信息</a></li>
</body></html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html><head><title>用户登录</title></head><body>
<form action="${pageContext.request.contextPath }/login"
method="POST"><div>${msg}</div>
用户名:<input type="text" name="username"/><br/>
密 码:
<input type="password" name="password"/><br/>
<input type="submit" value="登录"/>
</form></body></html>
<%@ page language="java" contentType="text/html; charset=UTF-8
"pageEncoding="UTF-8"%>
<html><head><title>订单信息</title></head><body>
您好:${ USER_SESSION.username }
<a href="${ pageContext.request.contextPath }/logout">退出</a>
<table border="1" width="80%">
<tr align="center"><td colspan="2" >订单id:D001</td></tr>
<tr align="center"><td>商品Id</td><td>商品名称</td></tr>
<tr align="center"><td>P001</td><td>三文鱼</td></tr>
<tr align="center"><td>P002</td><td>红牛</td></tr>
</table></body></html>
从步骤8和步骤9的图可以看出来,两次访问都显示用户登录界面。表明当用户没有登录时,访问系
统的资源都会跳转到登录页面,并且显示登录提示信息。
在步骤9所示的表单中,不填写任何用户信息,直接单击左下角的“登录”按钮,页面显示效果如图所示。
因篇幅问题不能全部显示,请点此查看更多更全内容