登陆成功则按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拦截器实现对登陆用户的身份验证的更多相关文章

  1. 分享知识-快乐自己:SpringMVC 结合使用拦截器(判断是否用户是否已登陆)

    基础拦截器操作: 拦截器是一种AOP操作实现,那么在AOP之中用户一定不需要去关注拦截器的存在,用户只需要按照自己已经习惯的处理方式进行代码的编写即可. 首先我们先创建一个自定义的拦截器: packa ...

  2. 分享知识-快乐自己:SpringBoot结合使用拦截器(判断是否用户是否已登陆)

    所有的开发之中拦截器一定是一个必须要使用的功能,利用拦截器可以更加有效的实现数据的验证处理,而且最为幸运的是在SpringBoot之中所使用的拦截器与Spring中的拦截器完全一样. 基础拦截器操作: ...

  3. SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期

    SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期 一.拦截器配置 <mvc:interceptors> <mvc:interceptor> < ...

  4. 用户登录拦截器查询到登录用户后如何将用户信息传递到后面的Controller

    taotao创建订单代码中之前忘了加入用户信息,那么加上呢? 分析:用户创建订单的时候,我们会强制要求用户先登录,也就是说,创建订单的Controller执行时,一定是用户已经登录了的,而用户只要登录 ...

  5. 转 Web用户的身份验证及WebApi权限验证流程的设计和实现

    前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权 ...

  6. [置顶] Web用户的身份验证及WebApi权限验证流程的设计和实现 (不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!!)

     转发 http://blog.csdn.net/besley/article/details/8516894 不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!! [ ...

  7. Web用户的身份验证及WebApi权限验证流程的设计和实现 asp.net mvc AllowAnonymous 不起作用, asp.net mvc 匿名访问

    原文地址: https://blog.csdn.net/zjlovety/article/details/17095627 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个 ...

  8. Struts2他们拦截器实例定义—登陆权限验证

    版本号:struts2.1.6 这种情况下实现功能:用户需要指定username登陆,进入相应的页面运行成功登陆作战,否则,它返回到着陆的登录页面,当直接进入操作页面(登陆访问页面后的能力)如果不同意 ...

  9. Struts2 利用拦截器 interceptor 控制登陆和访问权限

    最近学习了Struts2的登录和权限控制用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultSta ...

随机推荐

  1. 3.HTML+CSS 制作个太阳

    效果地址:https://codepen.io/flyingliao/pen/moPBwR HTML code: <div class="sun"></div&g ...

  2. 《算法》第六章部分程序 part 2

    ▶ 书中第六章部分程序,包括在加上自己补充的代码,B-树 ● B-树 package package01; import edu.princeton.cs.algs4.StdOut; public c ...

  3. 《算法》第一章部分程序 part 2

    ▶ 书中第一章部分程序,加上自己补充的代码,包括简单的计时器,链表背包迭代器,表达式计算相关 ● 简单的计时器,分别记录墙上时间和 CPU 时间. package package01; import ...

  4. range和xrange

    在python2.7中range()某个区间后,内存会立即创建区间内的所有数值,严重浪费内存,所以就出现了xrange():每次循环的时候生成一个数值 在python3版本中不存在xrange,只有r ...

  5. 【3-24】css样式表分类、选择器、样式属性

    一.css样式表分类: (一)内联样式表:代码写在标签内的样式表  控制精确 代码重用性差  优先级最高 格式:<p style="样式属性">内容</p> ...

  6. Kali 局域网 DNS 劫持

    <一> 所需工具  1: Kali-linux-2017  2: ettercap 0.8.2 3: web 服务器, 这里以 node 为例 <二> 原理  1: DNS劫持 ...

  7. win8换win7的操作方法

    详细参考UEFI与 Legacy BIOS两种启动模式详解  BIOS的两种引导模式 win8更换win7的方法的两个步骤:    (1).设置BIOS支持Legacy启动,具体目标就是设置secur ...

  8. [转]使用STM32CubeMX:USB大容量存储设备

    原文地址http://qiita.com/mt08/items/fcc925fa47726bfc6c74 概要 STM32CubeMXを使って.USB MassStorageを使ってみる. USBを使 ...

  9. groovy 从jsonList中读取某个字段

    今天又被groovy的高效吓到了. 想提取所有的itemCodes,两种玩法 一.常规方法:遍历组装 RestResult items = getListPager() def temp = [] i ...

  10. 【JEECG技术文档】JEECG 接口权限开发及配置使用说明

    1.功能介绍   通过接口配置实现,对接口的访问权限控制和数据权限控制,接口时REST接口,接口权限认证机制使用Json web token (JWT) 接口权限调用流程: (1)通过接口用户的用户名 ...