public ModelAndView downloadFile(
     HttpServletRequest request, HttpServletResponse response, DataObject para) throws Exception {
   response.setContentType("application/octet-stream; charset=ISO-8859-1");
   StringBuffer contentDisposition = new StringBuffer("\"attachment; filename=\"");
   try {
     DataObject result = NoticeMngBPO.downloadFile(para);
     String fileName = result.getString("fileName", "");
     byte[] fileByte = (byte[]) result.getObject("fileByte");
     if (fileName.length() > 150) // 解决IE 6.0 bug
     {
       fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");
     } else {
       fileName = URLEncoder.encode(fileName, "UTF-8");
     }
     contentDisposition.append(fileName);
     response.setHeader("Content-disposition", contentDisposition.toString());
     OutputStream os = response.getOutputStream();
     os.write(fileByte);
   } catch (ApplicationException e) {
     response.getOutputStream().close();
     LogHandler.saveBizLog(request, e.getMessage());
     return this.showErrorMessage(e.getMessage());
   }
   response.getOutputStream().close();
   return null;
 }
  /**
   * 登录方法
   *
   * @author zqr
   * @return void
   * @param request
   * @param response
   * @throws AppException
   * @date 创建时间 Mar 18, 2010
   * @since V1.0
   */
  public ModelAndView doLogon(
      HttpServletRequest request, HttpServletResponse response, DataObject para)
      throws AppException {
    try {
      Cookie cookie;
      CurrentUser user;
      DataStore myfunctionDs;
      DataStore allFunctionDs;
      DataStore functionDs;
      DataStore functionButtonList;
      DataObject rightObject;

      String userid = para.getString(GlobalNames.USERID);
      String passwd = para.getString(GlobalNames.PASSWD);

      userid = StringUtil.filterDangerString(userid);
      passwd = StringUtil.filterDangerString(passwd);

      String userLogSign = para.getString("userLogSign");
      String passWordLogSign = para.getString("passWordLogSign");

      HttpSession session = request.getSession(true);

      if (userLogSign.equals("1")) {
        cookie = new Cookie("userid", userid);
        cookie.setMaxAge(0x93a80);
        response.addCookie(cookie);
      }
      if (passWordLogSign.equals("1")) {
        cookie = new Cookie("passwd", passwd);
        cookie.setMaxAge(0x93a80);
        response.addCookie(cookie);
      }
      // 校验版本
      // if (!LogonUtil.checkFrameWorkVersion()) {
      // ActionUtil.writeMessageToResponse(response, "校验系统框架版本信息出错");
      // return null;
      // }
      // if (!LogonUtil.checkAppVersion()) {
      // ActionUtil.writeMessageToResponse(response, "校验系统版本信息出错");
      // return null;
      // }
      user = (CurrentUser) session.getAttribute(GlobalNames.CURRENT_USER);

      if (user != null) {
        String oldUserID = user.getUserid();
        if (!userid.equals(oldUserID)) {
          ActionUtil.writeMessageToResponse(response, "已经登录了一个其他用户,请先退出再登录该用户");
          return null;
        }
      }

      // 校验用户名,密码
      userid = userid != null ? userid.trim() : "";
      if (userid == null || "".equals(userid)) {
        ActionUtil.writeMessageToResponse(response, "用户名不能为空!");
        return null;
      }
      // 校验密码
      user = LogonUtil.getUser(userid);

      // 20120724 modi by www 记录用户验证错误的次数
      String lockInfo = LogonStatusMap.isLock(user.getUserid());
      if (!"".equals(lockInfo)) {
        ActionUtil.writeMessageToResponse(response, lockInfo);
        return null;
      }

      // 判断密码是否正确
      passwd = passwd != null ? passwd.trim() : "";
      if (!passwd.equals(user.getPassword())) {
        String checkInfo = LogonStatusMap.checkUser(userid); // 记录验证错误的次数
        ActionUtil.writeMessageToResponse(response, "您输入的密码不正确," + checkInfo);
        return null;
      } else {
        LogonStatusMap.remove(userid); // 验证通过后删除用户验证错误的记录
      }
      // 20120724 end modi by www
      user.setIp(request.getRemoteAddr());

      if (GlobalNames.DEMOMODE.equalsIgnoreCase("true")) { // 10.1.0.73
        // 公司内部演示系统使用。
        String ip = user.getIp();
        // 是否是“10.”ip段的用户
        if (!(ip.subSequence(0, 3).equals("10."))) {
          ActionUtil.writeMessageToResponse(response, "您所在的ip段不允许登录本系统!");
          return null;
        }
        // 校验是否是外网用户
        if (ip.equals("10.1.0.249")) { // 是外网用户
          if (!userid.equals("demo")) { // 是否是可以在外网登陆的用户名
            ActionUtil.writeMessageToResponse(response, "外网用户请先申请外网账号和密码!");
            return null;
          }
        }
      }
      // 获取allFuncitonDS,以及functionButtonList;
      allFunctionDs =
          (DataStore)
              request.getSession().getServletContext().getAttribute(GlobalNames.ALL_FUNCTION_LIST);

      rightObject = LogonUtil.getFunctionDs(userid, allFunctionDs);
      functionDs = rightObject.getDataStore("functionDs");
      functionButtonList = rightObject.getDataStore("functionButtonList");
      myfunctionDs = LogonUtil.getMyFunctionDs(userid, allFunctionDs);

      // 获取json功能列表
      String jsonFunctionList = null;
      try {
        jsonFunctionList = LogonUtil.getJsonFunctionList(functionDs, myfunctionDs);
      } catch (JSONException e) {
        e.printStackTrace();
      }

      // 获取用户自定义的jsp模版
      Map<String, String> mapUserMode = LogonUtil.getJspMode(userid, user.getJgbh());

      // 往session中存值。
      String sysNotice = LogonUtil.hasSysNotic(); // 20120723 add by www 获取系统消息
      session.setAttribute("sysNotice", sysNotice);
      session.setAttribute(GlobalNames.CURRENT_USER, user);
      session.setAttribute(
          GlobalNames.PAGE_SIZE,
          Integer.toString(
              ScreenTool.getPageSize(para.getInt("screenHeight"), para.getString("mode"))));
      session.setAttribute(
          GlobalNames.COUNTPERROW,
          Integer.toString(ScreenTool.getCountPerRow(para.getInt("screenWidth"))));

      session.setAttribute(
          GlobalNames.TABLE_WIDTH,
          Integer.toString(ScreenTool.getTableWidth(para.getInt("screenWidth"))));
      session.setAttribute("fromProduct", para.getStringPara("fromProduct"));
      session.setAttribute(GlobalNames.FUNCTION_LIST, functionDs);
      session.setAttribute(GlobalNames.MYFUNCTION_LIST, myfunctionDs);
      session.setAttribute(GlobalNames.FUNCTION_BUTTON_LIST, functionButtonList);
      session.setAttribute(GlobalNames.PROGRESSBAR_MAP, new HashMap<String, ProgressBar>());
      session.setAttribute(GlobalNames.JSP_USER_MAP_NAME, mapUserMode);
      session.setAttribute("functionJson", jsonFunctionList);
      try {
        Delegator.execute(
            "com.dareway.framework.log.LogonLogBPO", "logLogon", new DataObject(), user);
      } catch (Exception e) {
        e.printStackTrace();
      }
      ActionUtil.writeMessageToResponse(response, "true");
      return null;
    } catch (ApplicationException e) {
      ActionUtil.writeMessageToResponse(response, e.getMessage());
      return null;
    }
  }