当前访客身份:游客 [ 登录 | 加入开源中国 ]

讨论区

当前位置:
讨论区 » 技术问答 » Spring

11月23日开源中国源创会年度(北京万豪酒店)千人盛典正在报名中

验证用户登录代码如下:

@Controller
@RequestMapping("/userInfoController")
@SessionAttributes({"userInfo"})
public class userInfoController {

 @Autowired(required=true)
 private UserInfoApp userInfoApp;
 
 @RequestMapping(value="/login" ,method = RequestMethod.POST)
 public String login(TUserInfo userInfo,HttpServletRequest request,ModelMap map){
  TUserInfo result = userInfoApp.login(userInfo);
  if(null!=result){
   int role=result.getRole();
   if(1==role){
    
   }else if(2==role){
    
   }
   map.addAttribute("userInfo", result);
   return "index";
  }else{
   request.setAttribute("msg", "用户名或密码错误");
   return "login/login";
  }
  
 }

}

自己写的过滤器代码如下:

 

@SessionAttributes({"userInfo"})
public class SessionFilter implements Filter{

 private FilterConfig filterConfig;
 
 private String excludePath;
 
 private String redirectUrl;
 
 private String loginUrl;
 
 public void destroy() {
  this.filterConfig = null;
  
 }

 public void doFilter(ServletRequest req, ServletResponse res,
   FilterChain chain) throws IOException, ServletException {
  ModelMap map;
  HttpServletRequest request = (HttpServletRequest)req;
  HttpServletResponse response = (HttpServletResponse) res;
  String url = request.getRequestURL().toString();
  String controller = url.substring(url.lastIndexOf("/")+1);
  String[] exclude = excludePath.split(",");
  boolean flag = false;
  for(String str:exclude){
   if(url.indexOf(str)!=-1){
    flag = true;
    break;
   }
  }
  if(flag){
   chain.doFilter(request, response);
  }else{
   String tag = (String)SessionTimeOutListener.threadLocal.get();
   String userInfo =(String) request.getSession().getAttribute("userInfo");
   if(null!=tag && tag.equals("timeOut")){
    response.sendRedirect(request.getContextPath()+redirectUrl);
    return ;
   }else if(null==tag && null==userInfo){
    response.sendRedirect(request.getContextPath()+loginUrl);
    return ;
   }else if(null!=userInfo){
    chain.doFilter(request, response);
   }
   
  }
  chain.doFilter(request, response);
 }
 
 
 public void init(FilterConfig filterConfig) throws ServletException {
  this.filterConfig = filterConfig;
  this.excludePath = this.filterConfig.getInitParameter("excludePath");
  this.redirectUrl = this.filterConfig.getInitParameter("redirectUrl");
  this.loginUrl =this.filterConfig.getInitParameter("loginUrl");
 }

}

为什么在过滤器中 String userInfo =(String) request.getSession().getAttribute("userInfo");
这个userInfo总取不到值,获得的一直是null,请高手指点,在线等!谢谢了

magelite10 magelite10
发帖于 2 年 前
2回/5244阅

按票数排序  显示最新答案   共有2个答案 (最后回答: 2 个月 前)

    0
  • 羅立安的眼光
    session拿到了么
    --- 共有 1 条评论 ---
    • magelite10 在userInfoController的login方法中,把用户信息已经赋到session中了,我在页面都可以取到值了。不知道在过滤器中为什么取不到session的值,是不是需要配置什么东西,还是别的? (2 年 前)   回复
  • 0
  • xlp2009
    这个问题最后解决了吗?


回答案顶部 | 回页面顶部