SpringMVC之登录请求拦截
第一步实现拦截器接口HandlerInterceptor
重写HandlerInterceptor
接口中的preHandle
方法, 用于处理拦截到的请求是否放行
public class MyInterceptor implements HandlerInterceptor {
public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
//获取session
HttpSession session = request.getSession();
//判断请求URI中是否包含tologin, 包含就放行
if (request.getRequestURI().contains("tologin")){
return true;
}
//判断请求URI中是否包含login, 包含就放行
if (request.getRequestURI().contains("login")){
return true;
}
//判断session中的userinf属性是否存在, 且不为空字符(""), 如果满足就放行
if (session.getAttribute("userinf") != null && session.getAttribute("userinf") != ""){
return true;
}
//若以上条件都不满足, 则转发到别的页面
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
//不放行
return false;
}
}
第二步在spring.xml配置文件中配置拦截器
<!-- mvc拦截器-->
<mvc:interceptors>
<!-- 配置单个拦截器-->
<mvc:interceptor>
<!-- 配置拦截请求, 拦截/user下的所有请求-->
<mvc:mapping path="/user/**"/>
<!-- 配置拦截器类-->
<bean class="com.ml.controller.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
第三步关于controller
@Controller
@RequestMapping("/user")
public class MyController {
//请求去登录页面
@RequestMapping("/tologin")
public String tologin(){
//返回登录页面
return "login";
}
//请求登录
@RequestMapping("/login")
public String login(HttpSession session, String username, String password){
//如果用户名为 null 或者为 "", 将重定向到登录页面
if(username == null || username.equals("")){
return "redirect:/user/tologin";
}
//添加session属性
session.setAttribute("userinf",username);
//返回主页面
return "main";
}
//请求登录主页面
@RequestMapping("/main")
public String main(){
//返回主页面
return "main";
}
//请求注销, 退出
@RequestMapping("/goout")
public String goout(HttpSession session){
// 销毁session
// session.invalidate();
// 删除session属性
session.removeAttribute("userinf");
//注销后重定向到登录页面
return "redirect:/user/tologin";
}
}
第四步前端链接请求
<a href="${pageContext.request.contextPath}/user/tologin">登录</a>
<a href="${pageContext.request.contextPath}/user/main">首页</a>