拦截器实现网页用户登陆
实现思路
1.有一个登陆页面,需要写一个controller访问页面。
2. 登陆页面有一提交表单的动作。需要在controller中处理。判断用户名密码是否正确。如果正确,向session中写入用户信息。返回登陆成功。
3. 拦截用户请求,判断用户是否登陆。如果用户已经登陆。放行, 如果用户未登陆,跳转到登陆页面
1.编写一个登陆页面login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><h1>登陆页面</h1><hr><body><form action="${pageContext.request.contextPath}/user/login">用户名:<input type="text" name="username"><br>密码:<input type="password" name="pwd"><br><input type="submit" value="提交"></form></body></html>
2.编写一个Controller处理请求
@Controller@RequestMapping("/user")public class UserController {//跳转到登陆页面@RequestMapping("/jumplogin")public String jumpLogin(){return "login";}//跳转到成功页面@RequestMapping("/jumpSuccess")public String jumpSuccess(){return "success";}//登陆提交@RequestMapping("/login")public String login(HttpSession session, String username, String pwd){//向session记录用户身份信息System.out.println("接收前端==="+username);session.setAttribute("user",username);return "success";}//退出登陆@RequestMapping("logout")public String logout(HttpSession session){//session过期session.invalidate();return "login";}}
3.编写一个登陆成功的页面success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><h1>登陆成功页面</h1><hr>${user}<a href="${pageContext.request.contextPath}/user/logout">注销</a></body></html>
4.在 index 页面上测试跳转!启动Tomcat 测试,未登录也可以进入主页!
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>$Title$</title></head><body><h1>首页</h1><hr><%-- 登陆--%><a href="${pageContext.request.contextPath}/user/jumplogin">登陆</a><a href="${pageContext.request.contextPath}/user/jumpSuccess">成功页面</a></body></html>
5.编写用户登陆拦截器
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//如果是登陆页面则放行System.out.println("uri: "+request.getRequestURI());if(request.getRequestURI().contains("login")){return true;}HttpSession session=request.getSession();//如果用户已登陆也放行if(session.getAttribute("user")!=null){return true;}//用户没有登陆跳转到登陆页面request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);return false;}}
在springmvc文件中配置拦截器
<!-- 拦截器配置--><mvc:interceptors><mvc:interceptor><!-- /**包括路径及其子路径--><!-- /adimin/* 拦截的是/admin/add等等这种,/admin/add/user不会被拦截--><!-- /admin/** 拦截的是/admin/下的所有--><mvc:mapping path="/**"/><bean class="com.lding.config.MyInterceptor"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/user/**"/><bean id="loginInterceptor" class="com.lding.config.LoginInterceptor"></bean></mvc:interceptor></mvc:interceptors>
直接点击成功页面进不去,会自动跳转到登陆页面,登陆后才能进入成功页面