使用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 ...
随机推荐
- git clone慢
hosts中添加git域名映射 git安装目录/etc/hosts同样修改
- 1.App爬取相关库的安装(安装Charles及手机端证书安装配置)
一.官网下载Charles安装包: https://www.charlesproxy.com/download1.下载对应版本 我这里下载的是 win 64 bit (下载完解压,双击打开charle ...
- 16.Mongodb安装
Mongodb是由c++编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活. 1.相关链接: http ...
- js: 字符集
用js生成字符集 一般网页制作中需要一些向上向下的小箭头,用图片非常不合算(一个页面发起多个http请求.css.文件大小等方面考虑) 所以用一些字符集的字符图形,效果很好 下面是用js生成字符集,以 ...
- python中的remove
remove()从左到右寻找,移除找到的第一个指定元素,举个例子: 1 a = ["hello", "world", "world", &q ...
- stage的划分
stage的划分是以shuffle操作作为边界的,遇到一个宽依赖就分一个stage 一个Job会被拆分为多组Task,每组任务被称为一个Stage就像Map Stage, Reduce Stage.S ...
- N的多次方Python实现
N的多次方描述编写一个程序,计算输入数字N的0次方到5次方结果,并依次输出这6个结果,输出结果间用空格分隔.其中:N是一个整数或浮点数.print()函数可以同时输出多个信息,采用如下方法可以使用空格 ...
- leetcode1006
func clumsy(N int) int { var ary []int ; n-- { ary = append(ary, n) } re := N % //4个数字一组 firstgroup ...
- First changce exceptoin
C++,改一点代码,F9,报一串地址错. First changce exceptoin是啥原因 退出也rad重进也不行,只能clean工程,完整编译才可以.感觉是没有把最新修改编译链接. 有 ...
- css3 - 特性
伪类选择器 伪类选择器,不用再使用js来控制奇偶不同了 tr:nth-child(even){ background-color: white; } tr:nth-child(odd){ backgr ...