springmvc拦截器应用(实现登陆认证)

需求:

1. 用户请求url;

2. 拦截器进行拦截校验:

如果请求的url是公开地址(无需登陆就能访问的url,比如首页),则放行;

如果用户session不存在,则跳转到登陆页面;

如果用户session存在,则放行,继续操作。

实现:

controller:

import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class LoginController {
//登陆
@RequestMapping("/login")
public String login(HttpSession session, String userName, String password) {

//调用service进行...

//将用户身份信息存入session中
session.setAttribute("userName", userName);
return "redirect:/queryItems";
}

//退出(即清除session)
@RequestMapping("/logout")
public String logout(HttpSession session) {
//清除session
session.invalidate();
return "redirect:/queryItems";
}
}

interceptor:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class LoginInterceptor implements HandlerInterceptor {

//Handler执行完成之后执行
//应用场景:统一异常处理,统一日志处理
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception)
throws Exception {
System.out.println("afterCompletion");
}

//进入Handler之后,返回modelAndView之前执行
//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
System.out.println("postHandle");
}

//进入Handler之前执行
//用于身份认证,身份授权
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

//获取请求的url
String url = request.getRequestURI();
//判断url是否是公开地址(实际开发中要将公开地址配置在配置文件中)
//这里公开地址就是登陆页面的地址
if (url.indexOf("login") >= 0) {
return true;//放行
}
//判断session,从session中取得用户身份信息
HttpSession session = request.getSession();
String userName = (String) session.getAttribute("userName");
if (userName != null && userName != "") {
//身份存在,放行
return true;
}
//当代码执行到这里的时候说明用户未登录
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
//return false 表示拦截住,不向下执行
return false;
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值