IT人生
          專(zhuān)注于java相關(guān)技術(shù).
          posts - 53,comments - 87,trackbacks - 0

          項(xiàng)目中一般需要做驗(yàn)證用戶(hù)是否登陸,沒(méi)登陸就不能進(jìn)入ACTION執(zhí)行后臺(tái)代碼等的需要。
          這里根據(jù)以前經(jīng)驗(yàn)我用兩種方法做過(guò)驗(yàn)證,特記下供大家參考,有更好方法請(qǐng)留言。
          第一種
          為所有ACTION做一個(gè)BaseAction(此類(lèi) extends Action)
          此類(lèi)重載execute方法 ,部分實(shí)例代碼 ,根據(jù)個(gè)人需要去定
             /**
               * override method.
               */
              public ActionForward execute(ActionMapping mapping, ActionForm form,
                      HttpServletRequest request, HttpServletResponse response)
                      throws Exception
              {
                  super.execute(mapping, form, request, response);

                  //用戶(hù)如果未登錄或session過(guò)期,則轉(zhuǎn)向登錄動(dòng)作。
                  if (!isLogin(request))
                      return mapping.findForward("login");

                  try
                  {
                      ActionForward forward = doExecute(mapping, form, request, response);
                     
                      //重新生成token
                      //super.saveToken(request);
                      return forward;
                  } catch (Exception e)
                  {
                      logger.error(e);
                      e.printStackTrace();
                     
                      return mapping.findForward("systemError");
                  }
              }

          /**
               * 判斷用戶(hù)是否已經(jīng)登錄。
               *
               * @param request
               * @return
               */
              protected boolean isLogin(HttpServletRequest request)
              {
                  return request.getSession().getAttribute(Session_User) != null;
              }

          這樣寫(xiě)后,以后所有ACTION都繼承此類(lèi),然后重寫(xiě)doExecute方法即可
          GradeAction extends BaseAction
          在doExecute方法 寫(xiě)操作代碼

          第二種
          也是做個(gè)BaseAction繼承DispatchAction,然后所有ACTION繼承此BaseAction
          BaseAction主要代碼片段
          /**
               * override method.
               */
              public ActionForward execute(ActionMapping mapping, ActionForm form,
                      HttpServletRequest request, HttpServletResponse response)
                      throws Exception
              { //用戶(hù)如果未登錄或session過(guò)期,則轉(zhuǎn)向登錄動(dòng)作。
                if (!isLogin(request))
                      return mapping.findForward("sessionEnd");
          try
                  {
                     // ActionForward forward = new ActionForward();

                      //重新生成token
                      //super.saveToken(request);
                 
                      return super.execute(mapping, form, request, response);
                  } catch (Exception e)
                  {
                     // logger.error(e);
                      e.printStackTrace();
                     
                      return mapping.findForward("systemError");
                  }
          }
          以后所有類(lèi)繼承此基類(lèi)
          LinkAction extends ActionX
          由于DispatchAction特點(diǎn),所有繼承BaseAction的類(lèi)都可以正常寫(xiě)單獨(dú)方法完成。

          至此兩種驗(yàn)證見(jiàn)效。

          轉(zhuǎn)自:http://hi.baidu.com/nieweiguo/blog/item/9fee19d53cd761c751da4bb3.html
          減肥瘦身品總匯     值得信賴(lài)*脈脈美妝*正品現(xiàn)貨謝絕講價(jià)     〓深港商盟〓名品歐衣坊(美國(guó)休閑品牌AF系列)     QQ三國(guó)游戲幣及道具專(zhuān)賣(mài)店     小臉紅紅的瘦身旗艦店減肥瘦身品總匯     值得信賴(lài)*脈脈美妝*正品現(xiàn)貨謝絕講價(jià)     〓深港商盟〓名品歐衣坊(美國(guó)休閑品牌AF系列)     QQ三國(guó)游戲幣及道具專(zhuān)賣(mài)店     小臉紅紅的瘦身旗艦店



          減肥瘦身品總匯     值得信賴(lài)*脈脈美妝*正品現(xiàn)貨謝絕講價(jià)     〓深港商盟〓名品歐衣坊(美國(guó)休閑品牌AF系列)     QQ三國(guó)游戲幣及道具專(zhuān)賣(mài)店     小臉紅紅的瘦身旗艦店
          posted on 2009-05-26 08:53 龍華城 閱讀(2738) 評(píng)論(7)  編輯  收藏

          FeedBack:
          # re: Struts1.2 驗(yàn)證用戶(hù)是否登陸 兩種方法(轉(zhuǎn))
          2009-05-29 13:34 | zhong
          加個(gè)filter如何?這樣做可以避免把要過(guò)濾的action硬編碼于類(lèi)中,而且無(wú)需繼承BaseAction。不知這個(gè)方法如何?  回復(fù)  更多評(píng)論
            
          # re: Struts1.2 驗(yàn)證用戶(hù)是否登陸 兩種方法(轉(zhuǎn))
          2011-05-05 14:59 | liangwu
          嗯 用filter是一個(gè)好辦法  回復(fù)  更多評(píng)論
            
          # re: Struts1.2 驗(yàn)證用戶(hù)是否登陸 兩種方法(轉(zhuǎn))
          2011-05-05 16:08 | liangwu
          package com.gpPlatform.utils;
          /* 檢驗(yàn)管理員是否已經(jīng)登錄的過(guò)濾器*/
          import java.util.List;
          import java.util.ArrayList;
          import java.io.IOException;
          import javax.servlet.Filter;
          import javax.servlet.FilterChain;
          import javax.servlet.FilterConfig;
          import javax.servlet.ServletException;
          import javax.servlet.ServletRequest;
          import javax.servlet.ServletResponse;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.http.HttpSession;

          public class LoginCheckFilter implements Filter{

          private static List<String> notFilterURL;

          @SuppressWarnings("static-access")
          public void init(FilterConfig filterconfig) throws ServletException{
          this.notFilterURL= new ArrayList<String>();
          notFilterURL.add("/gpplatform/adminLog.jsp");
          notFilterURL.add("/gpplatform/errorPage.jsp");
          notFilterURL.add("/gpplatform/testJDBC.jsp");
          notFilterURL.add("/gpplatform/yzm.jsp");
          notFilterURL.add("/gpplatform/script/trim.js");
          }

          public void doFilter(ServletRequest req, ServletResponse res,
          FilterChain chain)throws IOException, ServletException{
          HttpServletRequest request= (HttpServletRequest) req;
          HttpServletResponse response= (HttpServletResponse) res;
          HttpSession session= request.getSession();

          boolean flag= true;
          String str= "/gpplatform"+request.getServletPath();

          for(String url:notFilterURL){
          if(str.equals(url)){
          flag= false;
          break;
          }
          }

          System.out.println(str+" "+flag);

          if(flag&&session.getAttribute("curr_admin")==null){
          //對(duì)不在notFilterURL集合路徑中的url進(jìn)行過(guò)濾
          System.out.println("<=====You haven't logged in!=====>");
          response.sendRedirect("/gpplatform/adminLog.jsp");
          }
          else{
          chain.doFilter(req, res);
          return;
          }
          }

          public void destroy(){}
          }  回復(fù)  更多評(píng)論
            
          # re: Struts1.2 驗(yàn)證用戶(hù)是否登陸 兩種方法(轉(zhuǎn))
          2011-05-05 16:16 | liangwu
          小弟初學(xué)java web開(kāi)發(fā),正在研究filter和listener。

          以上是自己一個(gè)web工程的filter。通過(guò)設(shè)置一個(gè)不被過(guò)濾的url集合notFilterURL,實(shí)現(xiàn)在struts1中沒(méi)有的interceptor所完成的功能。


            回復(fù)  更多評(píng)論
            
          # re: Struts1.2 驗(yàn)證用戶(hù)是否登陸 兩種方法(轉(zhuǎn))
          2011-06-02 17:25 | liangwu
          /*增強(qiáng)版:利用spring容器初始化dao的bean,再用init方法獲取系統(tǒng)context得到該dao從而實(shí)現(xiàn)RBAC模型下對(duì)動(dòng)作權(quán)限的管理 */
          package com.gpPlatform.utils;
          /* 檢驗(yàn)管理員是否已經(jīng)登錄及是否擁有權(quán)限的過(guò)濾器*/
          import java.util.List;
          import java.util.Map;
          import java.util.Iterator;
          import java.util.Set;
          import java.util.Date;
          import java.io.IOException;
          import javax.servlet.Filter;
          import javax.servlet.FilterChain;
          import javax.servlet.FilterConfig;
          import javax.servlet.ServletException;
          import javax.servlet.ServletRequest;
          import javax.servlet.ServletResponse;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpSession;
          import com.gpPlatform.IConstants;
          import com.gpPlatform.services.ResourceDao;
          import com.gpPlatform.forms.AdminForm;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.FileSystemXmlApplicationContext;

          public class SecurityCheckFilter implements Filter{

          private List<String> notFilterURL;

          private ResourceDao resourcedao= null;

          private Map<String,String> permits;

          private String getPermitId(String action_url){ //根據(jù)Map獲取動(dòng)作資源id
          this.permits= resourcedao.getResourceList();
          String rid_visited="NO_MATCH";
          Set<String> key = permits.keySet(); //獲取權(quán)限集map鍵集合
          for(Iterator<String> it=key.iterator();it.hasNext();){
          String k= it.next();
          if(k.equals(action_url)){
          rid_visited=permits.get(k);
          break;
          }
          }
          return rid_visited;
          }

          private boolean isPIdExist(AdminForm aform,String rid,boolean init){
          boolean flag=!init;
          if(!flag){
          String[] pArray= aform.getPermitList();
          for(String pid:pArray){
          System.out.println(pid);
          if(pid.equals(rid))
          return true;
          }
          }

          return flag;
          }

          public void init(FilterConfig filterconfig) throws ServletException{ //獲取系統(tǒng)context以傳遞屬性
          String configpath= "F:/tomcat 5.5.2/Tomcat 5.5/webapps/gpplatform/WEB-INF/appContext.xml";
          ApplicationContext context= new FileSystemXmlApplicationContext(configpath);
          IConstants iconstant=(IConstants)context.getBean("constants");
          resourcedao= (ResourceDao)context.getBean("resourcedao"); //不可setter直接注入,filter servlet容器先于spring生成
          notFilterURL = iconstant.getNotFilterURL();

          System.out.println("There are "+notFilterURL.size()+" urls free of filtering");
          }

          public void doFilter(ServletRequest req, ServletResponse res, //改寫(xiě)doFilter方法檢驗(yàn)
          FilterChain chain)throws IOException, ServletException{

          HttpServletRequest request= (HttpServletRequest) req;
          HttpSession session= request.getSession();
          AdminForm aform= (AdminForm)session.getAttribute(IConstants.CURR_ADMIN_KEY);

          boolean flag1= true;
          boolean flag2= true;

          String str= request.getServletPath();

          if(str.indexOf(".jsp")!=-1||str.indexOf(".do")!=-1){
          for(String url:notFilterURL){
          if(str.equals(url)){
          flag1= false;
          break;
          }
          }
          }
          else
          flag1= false;

          if(str.indexOf(".do")!=-1&&request.getParameter("method")!=null&&!request.getParameter("method").equals("readInfo"))
          str += "?method="+request.getParameter("method"); //獲取一般的動(dòng)作參數(shù)
          else
          flag2= false;

          System.out.println("action str is "+str+" "+flag1+" "+flag2);
          if(flag1){
          if(aform==null){ //對(duì)不在免除過(guò)濾路徑集合中的url進(jìn)行過(guò)濾
          System.out.println("<=======You haven't Logged in yet!=======>"+(new Date()).toString());
          request.setAttribute(IConstants.LOGIN_ERROR_KEY, "抱歉,您還沒(méi)有登陸本系統(tǒng)%>_<%");
          request.getRequestDispatcher("/adminLog.jsp").forward(req, res);
          }
          else{
          if(!this.isPIdExist(aform, this.getPermitId(str), flag2)){
          System.out.println("<======You don't hava such permit!======>"+(new Date()).toString());
          request.setAttribute(IConstants.PERMIT_ERROR_KEY,"抱歉,您不具備當(dāng)前功能的權(quán)限⊙﹏⊙ ");
          request.getRequestDispatcher("/errorPage.jsp").forward(req, res);
          }
          else{
          chain.doFilter(req, res);
          return;
          }
          }
          }
          else{
          chain.doFilter(req, res);
          return;
          }
          }

          public void destroy(){}
          }  回復(fù)  更多評(píng)論
            
          # re: Struts1.2 驗(yàn)證用戶(hù)是否登陸 兩種方法(轉(zhuǎn))
          2012-02-03 16:46 | v和vj
          頂頂頂頂頂頂頂頂頂  回復(fù)  更多評(píng)論
            
          # re: Struts1.2 驗(yàn)證用戶(hù)是否登陸 兩種方法(轉(zhuǎn))
          2015-04-13 15:31 | asd

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 舒兰市| 乳山市| 达拉特旗| 峨眉山市| 云安县| 定南县| 扎兰屯市| 额敏县| 潍坊市| 阳春市| 五寨县| 姜堰市| 南涧| 教育| 长子县| 五大连池市| 鲜城| 镇原县| 卓尼县| 镇康县| 来宾市| 法库县| 泾川县| 永福县| 怀安县| 道孚县| 合山市| 灯塔市| 横峰县| 阳泉市| 淮南市| 会泽县| 吉水县| 久治县| 武强县| 永安市| 咸宁市| 南川市| 万源市| 日喀则市| 郯城县|