posts - 14, comments - 22, trackbacks - 0, articles - 4
            BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

          如果用戶直接輸入了地址,不也可以直接訪問嗎?理論上是,我們可以加入session進(jìn)行跟蹤,以杜絕此類型事件發(fā)生,我們是不是要把每次對(duì)session的判斷依次拷到每個(gè)頁里呢,之后下次需要驗(yàn)證的SESSION換了,我們?cè)贀Q?太浪費(fèi)了,我的做法是做了一個(gè)自定義標(biāo)簽,來解決這個(gè)問題。

          import javax.servlet.jsp.JspException;
          import javax.servlet.jsp.tagext.TagSupport;

          public class CheckTag extends TagSupport
          {
          ??? private static final long serialVersionUID = 879137944441282895L;
          ??? private String check = "";//用來驗(yàn)證的變量
          ??? private String url = "index.jsp";//出現(xiàn)錯(cuò)誤要去的頁面
          ??? private String msg = "";//錯(cuò)誤的提示
          ??? private String scope = "";//要嚴(yán)整變量的范圍
          ??? private String to = "go";
          //如果驗(yàn)證失敗,是將頁面后退,還是定位到哪里?

          ??? public String getTo()
          ??? {
          ??????? return to;
          ??? }

          ??? public void setTo( String to )
          ??? {
          ??????? this.to = to;
          ??? }

          ??? public String getMsg()
          ??? {
          ??????? return msg;
          ??? }

          ??? public void setMsg( String msg )
          ??? {
          ??????? this.msg = msg;
          ??? }

          ??? public String getScope()
          ??? {
          ??????? return scope;
          ??? }

          ??? public void setScope( String scope )
          ??? {
          ??????? this.scope = scope;
          ??? }

          ??? public String getCheck()
          ??? {
          ??????? return check;
          ??? }

          ??? public void setCheck( String check )
          ??? {
          ??????? this.check = check;
          ??? }

          ??? public String getUrl()
          ??? {
          ??????? return url;
          ??? }

          ??? public void setUrl( String url )
          ??? {
          ??????? this.url = url;
          ??? }

          ??? public int doStsrtTag() throws JspException
          ??? {
          ??????? return SKIP_BODY;
          ??? }

          ??? public int doEndTag() throws JspException
          ??? {
          ??????? boolean valid = false;//先設(shè)為不可用
          ??????? if ( scope.equalsIgnoreCase( "request" ) )//如果要檢查request范圍
          ??????? {
          ??????????? valid = CheckUtil.checkRequestAttribute( pageContext.getRequest(),
          ??????????????????? check );
          ??????? }
          ??????? else if ( scope.equalsIgnoreCase( "session" ) )
          ??????? {
          ??????????? valid = CheckUtil.checkSession( pageContext.getSession(), check );
          ??????? }
          ??????? else if ( scope.equalsIgnoreCase( "parameter" ) )
          ??????? {
          ??????????? valid = CheckUtil.checkParameter( pageContext.getRequest(), check );
          ??????? }
          ??????? else if ( scope.equalsIgnoreCase( "application" ) )
          ??????? {
          ??????????? valid = CheckUtil.checkApp( pageContext.getServletContext(), check );
          ??????? }
          ??????? if ( valid ) return EVAL_PAGE;//如果可用就繼續(xù)執(zhí)行此頁的其余部分
          ??????? else
          ??????? {//否則,哈哈
          ??????????? try
          ??????????? {
          ??????????????? if ( to.equalsIgnoreCase( "go" ) ) //現(xiàn)在失敗了,就看怎么回到你該到的地方
          ??????????????????? HtmlUtil.callParentGo(
          ??????????????????????? pageContext.getOut(), msg, url );//將瀏覽器定位到URL?
          ??????????????? else
          ??????????????????? HtmlUtil.callBack( pageContext.getOut(), msg );//后退一下頁面來阻止
          ??????????????? return SKIP_PAGE;//跳過頁面的其余部分,不執(zhí)行
          ??????????? }
          ??????????? catch ( Exception e )
          ??????????? {
          ??????????????? throw new JspException( e.toString() );
          ??????????? }
          ??????? }
          ??? }

          ??? public void release()
          ??? {
          ??????? super.release();
          ??????? check = "";
          ??????? url = "";
          ??????? msg = "";
          ??????? scope = "";
          ??? }
          }


          下面是用到的htmlUtil部分:

          public static void callParentGo( Writer out, String msg, String url )
          ??????????? throws IOException
          ??? {
          ??????? out.write( "<script language=\"javascript\">" );
          ??????? out.write( "alert(\"" + msg + "\");" );
          ??????? out.write( "parent.location.href=\"" + url + "\";" );
          ??????? out.write( "</script>" );
          ??? }
          public static void callBack( Writer out, String msg ) throws IOException
          ??? {
          ??????? out.write( "<script language=\"javascript\">" );
          ??????? out.write( "alert(\"" + msg + "\");" );
          ??????? out.write( "parent.history.back();" );
          ??????? out.write( "</script>" );
          ??? }


          寫個(gè)check.tld部署吧,

          <?xml version = "1.0"?>
          <taglib>
          ?<tlibversion>1.0</tlibversion>
          ?<jspversion>1.1</jspversion>
          ?<tag>
          ??<name>check</name>
          ??<tag-class>com.boya.subject.util.CheckTag</tag-class>
          ??<attribute>
          ???<name>check</name>
          ???<required>true</required>
          ??</attribute>
          ??<attribute>
          ???<name>url</name>
          ???<required>false</required>
          ??</attribute>
          ??<attribute>
          ???<name>msg</name>
          ???<required>true</required>
          ??</attribute>
          ??<attribute>
          ???<name>scope</name>
          ???<required>true</required>
          ??</attribute>
          ??<attribute>
          ???<name>to</name>
          ???<required>false</required>
          ??</attribute>
          ?</tag>
          </taglib>


          只要在每個(gè)頁面里寫下這個(gè)就可以判定用戶是否登陸了

          <%@ taglib prefix="boya" uri="/WEB-INF/check.tld" %>
          <boya:check check="admin" msg="管理員尚未登陸,請(qǐng)登陸!" scope ="session"/>

          如果沒有登陸那么,會(huì)自動(dòng)提示到首頁登陸,不錯(cuò),很完美吧?

          當(dāng)然不是,您可以提出您的見解。。。。


          評(píng)論

          # re: 體驗(yàn)Struts(6)---阻止非法的登陸方式  回復(fù)  更多評(píng)論   

          2009-11-02 14:17 by dawnlch
          這樣是可以阻止用戶的登錄,但是不能阻止登錄的用戶通過輸入網(wǎng)址去操作他并沒有的權(quán)限啊!請(qǐng)問這要怎么解決啊

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


          網(wǎng)站導(dǎo)航:
           
          有事在這里給我留言噢!
          主站蜘蛛池模板: 武冈市| 琼海市| 应城市| 兴义市| 庆安县| 罗定市| 塘沽区| 临猗县| 怀远县| 东阳市| 新民市| 瑞安市| 阿拉善左旗| 淮阳县| 肇源县| 长治县| 定结县| 永安市| 大名县| 南郑县| 五指山市| 北碚区| 陈巴尔虎旗| 介休市| 绵竹市| 忻州市| 资兴市| 客服| 许昌县| 沾益县| 乐都县| 汤原县| 邵武市| 溆浦县| 邛崃市| 大新县| 富顺县| 灵宝市| 浙江省| 建瓯市| 扎赉特旗|