使用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 ...
随机推荐
- add_featurelayer_to_map
var jsonFS = { "geometryType": "esriGeometryPolygon", "features": [ { ...
- 《锋利的JQuery》中重写超链接与图片提示效果
代码部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...
- Flex学习笔记-时间触发器
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- django之register_model(self, app_label, model):
前面在阅读apps_install源码时,一直不明白app的model是什么时候导入的,今天在看modelbase源码时,看到了new_class._prepare() new_class._meta ...
- Redis 常见配置
- centos 7 端口
查看端口是否占用 netstat -tlnp|grep 8080 查看已经开放的端口 firewall-cmd --zone=public --list-ports 增加开放端口 firewall-c ...
- 用代码检查Windows程序的位数
方法就是通过读取程序文件的头部来判断,具体代码如下: #include <stdio.h> #include <windows.h> int CrnGetImageFileMa ...
- 机器学习入门-文本数据-构造Ngram词袋模型 1.CountVectorizer(ngram_range) 构建Ngram词袋模型
函数说明: 1 CountVectorizer(ngram_range=(2, 2)) 进行字符串的前后组合,构造出新的词袋标签 参数说明:ngram_range=(2, 2) 表示选用2个词进行前后 ...
- math模块
序号 方法 功能 示例 1 matd.ceil 取大于等于x的最小的整数值,如果x是一个整数,则返回x print(matd.ceil(10.1))# 11print(matd.ceil(-3.1)) ...
- tips___代码规范
函数变量尽可能置于最小作用域内,并在变量声明时进行初始化 变量声明的位置最好离第一次使用的位置越近越好:应使用初始化的方式代替声明再赋值. int x=0; rather than int x; x ...