功能介绍
/**
* 1、有一个登录页面,需要写一个 controller 访问页面
* 2、登录页面有一提交表单的动作。需要在 controller 中处理。
* 2.1、判断用户名密码是否正确
* 2.2、如果正确 向 session 中写入用户信息
* 2.3、返回登录成功。
* 3、拦截用户请求,判断用户是否登录
* 3.1、如果用户已经登录。放行
* 3.2、如果用户未登录,跳转到登录页面
*/
项目结构
需要完整代码可以关注并私信我
结果
-
点击登录(提交),显示登陆成功,返回此页面,点击查看图片,可以查看图片;
-
点击注销(清除session登录信息),点击查看图片
-
注意:使用无痕窗口进行调试
-
此时查看被拦截,仍然在登录页面。
主要代码实现
控制器:登录,访问图片,注销
package indi.huishi.controller;
import indi.huishi.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 1、有一个登录页面,需要写一个 controller 访问页面
* 2、登录页面有一提交表单的动作。需要在 controller 中处理。
* 2.1、判断用户名密码是否正确
* 2.2、如果正确 向 session 中写入用户信息
* 2.3、返回登录成功。
* 3、拦截用户请求,判断用户是否登录
* 3.1、如果用户已经登录。放行
* 3.2、如果用户未登录,跳转到登录页面
* @author Huishi
*/
@Controller
@RequestMapping("/user")
public class LoginController {
//访问 http://localhost:8080/springmvc_login_interceptor_war_exploded/images/21.jpg
/**
* 登录
* @param user
* @param model
* @param request
* @return
*/
@RequestMapping("/login")
public String login(User user, Model model, HttpServletRequest request){
// System.out.println(user);
// 判断用户名和密码
if(user.getUsername().equals("Huishi") && user.getPassword().equals("123456")){
// 如果正确 向 session 中写入用户信息
request.getSession().setAttribute("userInfo", user);
System.out.println(request.getSession().getAttribute("userInfo"));
return "success";
}
return "error";
}
/**
* 访问
* @param user
* @param model
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
@RequestMapping("/enter")
public void enter(User user, Model model, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("http://localhost:8080/springmvc_login_interceptor_war_exploded/images/1.png");
}
/**
* 注销
* @param request
* @return
*/
@RequestMapping("/logout")
public @ResponseBody User
logout(String s, HttpServletRequest request){
System.out.println("注销...");
// 清空用户信息
request.getSession().setAttribute("userInfo",null);
return (User) request.getSession().getAttribute("userInfo");
}
}
拦截器:拦截访问图片的请求路径
package indi.huishi.interceptor;
import indi.huishi.pojo.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Huishi
*/
public class LoginInterceptor implements HandlerInterceptor {
private static String userInfo = "userInfo";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
User user = (User) request.getSession().getAttribute(userInfo);
System.out.println("拦截器user"+user);
if (user == null){
// 如果用户未登录,跳转到登录页面
request.getRequestDispatcher("/index.jsp").forward(request, response);
return false;
}else{
// 含有user信息,放行
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
拦截器配置
<!--拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/enter"/>
<bean class="indi.huishi.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
页面index.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Created by IntelliJ IDEA.
User: Huishi
Date: 2021/4/15
Time: 21:27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<%@include file="/WEB-INF/pages/base.jsp"%>
<base href="<%=basePath%>">
<title>Title</title>
</head>
<body>
<script type="text/javascript" src="script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function (){
$("#logout").click(function(){
清空session中的登录信息
<%--alert("${pageContext.request.contextPath}");--%>
$.ajax({
url:"${pageContext.request.contextPath}/user/logout",
data:null,
dataType:"json",
success:function(data){
if(data==null) {
$("#status").text("清空成功").css('color','green');
}else{
$("#status").text("清空失败").css('color','red');
}
}
});
});
});
</script>
<table>
<form action="user/login" method="post">
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value="Huishi"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" name="password" value="123456"></td>
</tr>
<tr>
<td><input type="submit" name="登录"></td>
</tr>
</form>
<tr>
<td>
<input type="button" id="logout" value="注销(清除session登录信息)">
</td>
<td>
<span id="status"></span>
</td>
</tr>
<tr>
<td>
<a href="user/enter">查看图片</a>
</td>
</tr>
</table>
</body>
</html>