使用SpirngMvc拦截器实现对登陆用户的身份验证
登陆成功则按returnUrl进行跳转,即跳转到登陆之前的页面,否则跳转到登陆页面,返回登陆错误信息。
1.SpringMVC.xml
<!-- 映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors"> <!-- 在映射器拦截 -->
<list>
<bean class="cn.itcast.core.web.SpringMvcInterceptor"/>
</list>
</property>
</bean> <!-- 适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
2.SpringMvcInterceptor.java
public class SpringMvcInterceptor implements HandlerInterceptor{//转换拦截器
@Autowired
private SessionProvider sessionProvider;private static final String INTERCEPTOR_URL = "/buyer/";
//方法前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
Buyer buyer = (Buyer) sessionProvider.getAttribute(request, Constants.BUYER_SESSION);
boolean flag = false;
if(null!=buyer){
flag = true;
}
request.setAttribute("isLogin", flag);
String requestURI = request.getRequestURI();
if(requestURI.startsWith(INTERCEPTOR_URL)){
if(null==buyer){
response.sendRedirect("/shopping/login.shtml?returnUrl="+request.getParameter("returnUrl"));
return false;
}
}
return true; //为true时后面方法才能继续
}
//方法后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
//页面渲染后
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
public void setAdminId(Integer adminId) {
this.adminId = adminId;
}
}
3.登陆Controller
@Controller
public class ProfileController {
@Autowired
private SessionProvider sessionProvider;
@Autowired
private BuyerService buyerServicervice;
@Autowired
private Md5Pwd md5Pwd; //注入借口 @RequestMapping(value= "/shopping/login.shtml", method=RequestMethod.GET)
public String login(){ //登录跳转页面 携带returnUrl
return "buyer/login";
}
@RequestMapping(value="/shopping/login.shtml",method= RequestMethod.POST)
public String login(Buyer buyer,String captcha,String returnUrl,ModelMap model,HttpServletRequest request){
if(null!=buyer&&StringUtils.isNotBlank(buyer.getUsername())){
Buyer b = buyerServicervice.getBuyerByKey(buyer.getUsername());
if(b!=null){
if(b.getPassword().equals(md5Pwd.encode(buyer.getPassword()))){
sessionProvider.setAttribute(request,Constants.BUYER_SESSION, b);
if(StringUtils.isNotBlank(returnUrl)){
return "redirect:"+returnUrl;
// return "redirect:/buyer/index.shtml";
}else{
return "redirect:/buyer/index.shtml";
} }else{
model.addAttribute("error","密码错误");
}
}else{
model.addAttribute("error","改用户不存在");
} }else{
model.addAttribute("error","用户名不能为空");
System.out.println("用户名为空");
}
return "buyer/login";
}
}
4.工具类SessionProvider
public class HttpSessionProvider implements SessionProvider{
public void setAttribute(HttpServletRequest request, String name, Serializable value) {
// TODO Auto-generated method stub
HttpSession session = request.getSession();//ture表示 如果requst当中有session则不用创建,否则创建
session.setAttribute(name, value);
}
public Serializable getAttribute(HttpServletRequest request, String name) {
// TODO Auto-generated method stub
HttpSession session = request.getSession(false);
if(null!=session){
return (Serializable) session.getAttribute(name);
}
return null;
}
public void logOut(HttpServletRequest request) {
// TODO Auto-generated method stub
HttpSession session = request.getSession(false);
if(null!=session){
session.invalidate();//session失效
}
}
public String getSessionId(HttpServletRequest request) {
// TODO Auto-generated method stub
// request.getRequestedSessionId(); //通过url获取sessionId
return request.getSession().getId();
}
}
public interface SessionProvider {
/**
* session注入值
* @param request
* @param name
* @param value
* @param serializable
*/
public void setAttribute(HttpServletRequest request,String name,Serializable value);
/**
* 从session中取值
* @param request
* @param name
* @return
*/
public Serializable getAttribute(HttpServletRequest request,String name);
/**
* session失效 退出登录
* @param request
*/
public void logOut(HttpServletRequest request);
/**
* 获取sessionId
* @param request
* @return
*/
public String getSessionId(HttpServletRequest request);
}
5.jsp
<li class="dev"><a href="javascript:void(0)" onclick="login()" title="登陆">[登陆]</a></li>
function login(){
window.location.href = "/shopping/login.shtml?returnUrl="+window.location.href;
}
使用SpirngMvc拦截器实现对登陆用户的身份验证的更多相关文章
- 分享知识-快乐自己:SpringMVC 结合使用拦截器(判断是否用户是否已登陆)
基础拦截器操作: 拦截器是一种AOP操作实现,那么在AOP之中用户一定不需要去关注拦截器的存在,用户只需要按照自己已经习惯的处理方式进行代码的编写即可. 首先我们先创建一个自定义的拦截器: packa ...
- 分享知识-快乐自己:SpringBoot结合使用拦截器(判断是否用户是否已登陆)
所有的开发之中拦截器一定是一个必须要使用的功能,利用拦截器可以更加有效的实现数据的验证处理,而且最为幸运的是在SpringBoot之中所使用的拦截器与Spring中的拦截器完全一样. 基础拦截器操作: ...
- SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期
SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期 一.拦截器配置 <mvc:interceptors> <mvc:interceptor> < ...
- 用户登录拦截器查询到登录用户后如何将用户信息传递到后面的Controller
taotao创建订单代码中之前忘了加入用户信息,那么加上呢? 分析:用户创建订单的时候,我们会强制要求用户先登录,也就是说,创建订单的Controller执行时,一定是用户已经登录了的,而用户只要登录 ...
- 转 Web用户的身份验证及WebApi权限验证流程的设计和实现
前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权 ...
- [置顶] Web用户的身份验证及WebApi权限验证流程的设计和实现 (不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!!)
转发 http://blog.csdn.net/besley/article/details/8516894 不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!! [ ...
- Web用户的身份验证及WebApi权限验证流程的设计和实现 asp.net mvc AllowAnonymous 不起作用, asp.net mvc 匿名访问
原文地址: https://blog.csdn.net/zjlovety/article/details/17095627 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个 ...
- Struts2他们拦截器实例定义—登陆权限验证
版本号:struts2.1.6 这种情况下实现功能:用户需要指定username登陆,进入相应的页面运行成功登陆作战,否则,它返回到着陆的登录页面,当直接进入操作页面(登陆访问页面后的能力)如果不同意 ...
- Struts2 利用拦截器 interceptor 控制登陆和访问权限
最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultSta ...
随机推荐
- a.每个 HTML 文件里开头都有个<!DOCTYPE>
<!DOCTYPE> 位于文档中最前面的位置,告诉浏览器以哪个HTML版本进行解析. 在 HTML5 中只有一种:<!DOCTYPE html> .
- [多线程]wait和notify
线程之间的通信 使用wait/notify方法实现线程间的通信.这两个方法都是Object类的方法,也就是说Java所有的对象都提供这两个方法.1.wait和notify必须配合synchroni ...
- python中的upper、lower、capitalize、title
upper()字符串中字母由小写变为大写 lower()字符串中字母由大写变为小写 capitalize()字符串中字母首字母大写其余小写 title()字符串中字母每个单词的首字母大写其余小写 举个 ...
- 廖雪峰老师Python3教程练习整理
1.定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:ax2 + bx + c = 0的两个解 # -*- coding: utf-8 -*-import mathde ...
- python 求3到8位数的水仙花数Pycharm实现
#-*- coding: utf-8-*-import timeimport math#获取3位数的水仙花数start1 = time.time()start = time.time() number ...
- 使用STM32的USART的同步模式Synchronous调戏SPI【usart模拟spi理论】
[原创出品§转载请注明出处] 出处:http://www.cnblogs.com/libra13179/p/7064321.html 什么东西?? 我们先来看我们平常看到SPI的时序图(呵呵,要是忘记 ...
- windows下Jenkins环境搭建
Jenkins简介 Jenkins是一个开源软件项目,业界著名的持续集成工具. Jenkins 安装准备 1. 安装java 并且配置jdk环境 2. 到Jenkins官网下载Je ...
- day10-列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 1.生成一个列表 a = [i for i in range(1,100) if ...
- csredis base usage
Basic usage Whenever possible, server responses are mapped to the appropriate CLR type. using (var r ...
- MVC之Model元数据
Contronoller激活之后,ASP.NET MVC会根据当前请求上下文得到目标Action的名称,然后解析出对应的方法并执行之. 在整个Action方法的执行过程中,Model元数据的解析是一个 ...