登陆成功则按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. ADO.net之综合演练

    using ConsoleApplication4.App_Code; using System; using System.Collections.Generic; using System.Lin ...

  2. snmp安装,及测试

    https://www.cnblogs.com/xdp-gacl/p/4016524.html

  3. 分享给大家一个500G.Net ftp资料库

    把自己经常用到的一个ftp资料库分析给大家,大家可以到上面下载资料学习,资料比较齐全,另外还有部分工具, ftp的地址是:ftp://202.107.251.26

  4. python大法好——字典、集合

    字典 前面我们说过列表,它适合于将值组织到一个结构中并且通过编号对其进行引用.字典则是通过名字来引用值的数据结构,并且把这种数据结构称为映射,字典中的值没有特殊的顺序,都存储在一个特定的键(key)下 ...

  5. [记录] Mysql 复制表格结构

    有时候我们需要原封不动的复制一张表的表结构来生成一张新表,MYSQL提供了两种便捷的方法 一.LIKE方法 like方法能一模一样的将一个表的结果复制生成一个新表,包括复制表的备注.索引.主键外键.存 ...

  6. <基础> PHP 字符串操作

    explode — 使用一个字符串分割另一个字符串 array explode ( string $delimiter , string $string [, int $limit ] ) implo ...

  7. J2SE 8的流库 --- 生成流

    本文介绍了如何产生J2SE 8的流, 包括基本类型的流IntStream, LongStream, DoubleStream . 展现流的方法 public static <T> void ...

  8. du 统计文件夹大小

    du -h --max-depth=1 |grep [TG] |sort   #查找上G和T的目录并排序 du -sh    #统计当前目录的大小,以直观方式展现 du -h --max-depth= ...

  9. day05-if-else语句

    1.Python条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块.Python程序语言指定任何非0和非空(null)值为true,0 或者 nu ...

  10. Leetcode 题解 Combinations:回溯+求排列组合

    罗列出从n中取k个数的组合数组. 首先,求C(n,k)这个实现,很粗糙,溢出也不考虑,好的方法也不考虑.笨蛋.心乱,上来就写.. 另外,发现在递归中,不能申请太大的数组?貌似不是这个问题,是我自己越界 ...