<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>anranran</title>
    <description></description>
    <link>http://anranran.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>删除oracle用户对象</title>
        <author>anranran</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://anranran.javaeye.com">anranran</a>&nbsp;
          链接：<a href="http://anranran.javaeye.com/blog/173401" style="color:red;">http://anranran.javaeye.com/blog/173401</a>&nbsp;
          发表时间: 2008年03月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          DECLARE  <br />TYPE name_list IS TABLE OF VARCHAR2(40);   <br />TYPE type_list IS TABLE OF VARCHAR2(20);   <br />  <br />Tab_name name_list:=name_list();   <br />Tab_type type_list:=type_list();   <br />  <br />sql_str VARCHAR2(500);   <br />BEGIN  <br />sql_str := 'select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in(''INDEX'',''LOB'') order by uo.object_type desc';   <br />EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;   <br />  <br />FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP   <br />sql_str := 'DROP ' || Tab_type(i) || ' ' || Tab_name(i);   <br />EXECUTE IMMEDIATE sql_str;   <br />END LOOP;   <br />END;   <br /><br />删除表空间：drop tablespace XXXX INCLUDING CONTENTS;    <br />drop user XXXX cascade;
          <br/>
          <span style="color:red;">
            <a href="http://anranran.javaeye.com/blog/173401#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 18 Mar 2008 14:58:04 +0800</pubDate>
        <link>http://anranran.javaeye.com/blog/173401</link>
        <guid>http://anranran.javaeye.com/blog/173401</guid>
      </item>
      <item>
        <title>Spring2.52版本</title>
        <author>anranran</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://anranran.javaeye.com">anranran</a>&nbsp;
          链接：<a href="http://anranran.javaeye.com/blog/169981" style="color:red;">http://anranran.javaeye.com/blog/169981</a>&nbsp;
          发表时间: 2008年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          刚下了Spring2.52版本，不知道为什么在他的modules下没有Spring-dao的jar包？
          <br/>
          <span style="color:red;">
            <a href="http://anranran.javaeye.com/blog/169981#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Mar 2008 21:48:31 +0800</pubDate>
        <link>http://anranran.javaeye.com/blog/169981</link>
        <guid>http://anranran.javaeye.com/blog/169981</guid>
      </item>
      <item>
        <title>renderResponse和responseComplete</title>
        <author>anranran</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://anranran.javaeye.com">anranran</a>&nbsp;
          链接：<a href="http://anranran.javaeye.com/blog/157985" style="color:red;">http://anranran.javaeye.com/blog/157985</a>&nbsp;
          发表时间: 2008年01月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          源码讲解renderResponse和responseComplete的区别<br />关键字: renderResponse responseComplete <br />看源代码：<br />responseComplete：<br />/**   <br />    * &lt;p>Signal the JavaServer Faces implementation that the HTTP response   <br />    * for this request has already been generated (such as an HTTP redirect),   <br />    * and that the request processing lifecycle should be terminated as soon   <br />    * as the current phase is completed.&lt;/p>   <br />    *   <br />    * @throws IllegalStateException if this method is called after   <br />    *  this instance has been released   <br />    */   <br />   public abstract void responseComplete();   <br /><br />renderResponse：<br />/**   <br />  * &lt;p>Signal the JavaServer faces implementation that, as soon as the   <br />  * current phase of the request processing lifecycle has been completed,   <br />  * control should be passed to the &lt;em>Render Response&lt;/em> phase,   <br />  * bypassing any phases that have not been executed yet.&lt;/p>   <br />  *   <br />  * @throws IllegalStateException if this method is called after   <br />  *  this instance has been released   <br />  */   <br /> public abstract void renderResponse();   <br /><br />responseComplete和renderResponse的关系有点象break和continue的关系，responseComplete指示当前的response已经产生，JSF应该在当前阶段执行完成后立刻整个生命周期，break的概念。renderResponse则是指示当前阶段执行结束后直接跳到Render Response阶段，继续生命周期，因此是continue的概念。<br /><br />下面是LifeCycle的execute和render方法，更加证实了这些：<br /><br />com.sun.faces.lifecycle.LifecycleImpl<br />// Execute the phases up to but not including Render Response    <br />public void execute(FacesContext context) throws FacesException {    <br />   <br />    if (context == null) {    <br />        throw new NullPointerException    <br />            (MessageUtils.getExceptionMessageString    <br />             (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));    <br />    }    <br />   <br />    if (LOGGER.isLoggable(Level.FINE)) {    <br />        LOGGER.fine("execute(" + context + ")");    <br />    }    <br />   <br />    for (int i = 1, len = phases.length -1 ; i &lt; len; i++) { // Skip ANY_PHASE placeholder    <br />   <br />        if (context.getRenderResponse() ||    <br />            context.getResponseComplete()) {    <br />            break;    <br />        }    <br />   <br />        phases[i].doPhase(context, this, listeners.listIterator());    <br />   <br />    }    <br />   <br />}    <br />   <br />   <br />// Execute the Render Response phase    <br />public void render(FacesContext context) throws FacesException {    <br />   <br />    if (context == null) {    <br />        throw new NullPointerException    <br />            (MessageUtils.getExceptionMessageString    <br />             (MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID, "context"));    <br />    }    <br />   <br />    if (LOGGER.isLoggable(Level.FINE)) {    <br />        LOGGER.fine("render(" + context + ")");    <br />    }    <br />   <br />    if (!context.getResponseComplete()) {    <br />        response.doPhase(context, this, listeners.listIterator());    <br />    }    <br />   <br />}   <br />一般加ResponseComplete之后,当前页面会变成空白,这对于后台关闭页面可用
          <br/>
          <span style="color:red;">
            <a href="http://anranran.javaeye.com/blog/157985#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jan 2008 12:57:04 +0800</pubDate>
        <link>http://anranran.javaeye.com/blog/157985</link>
        <guid>http://anranran.javaeye.com/blog/157985</guid>
      </item>
      <item>
        <title>ＪＳＦ</title>
        <author>anranran</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://anranran.javaeye.com">anranran</a>&nbsp;
          链接：<a href="http://anranran.javaeye.com/blog/155288" style="color:red;">http://anranran.javaeye.com/blog/155288</a>&nbsp;
          发表时间: 2008年01月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          把JSF从1.1升级到1.2，这个过程中暴漏出JSF的一些不足，如下：<br /><br />一，原来在1.1下运行很正常的backing bean 不再正常了，调试之后发现有些backing bean 竟然是使用的包级私有的构造函数，但是很纳闷怎么在1.1下正常而1.2下就实例化不了，可能是JSF 1.1 的实现中是利用反射机制进行backing bean的初始化吧，而1.2又改成调用backing bean 的默认构造函数了，所以碰到包级私有构造函数的backin bean 才出现无法实例化的异常吧。<br /><br />二，JSF提供的组件中的那个SelectOneMenu个人认为有一个不足之处，如果服务器端初始化组件树时候有四个待选项，到了客户端页面通过ajax对待选项进行了修改，比如改成了五个，这中情况下你页面中的所有command类型的组件的方法绑定都会失效，跟踪JSF源码发现这个SelectOneMenu的Render中首先进行了一个个人认为画蛇添足的校验，它首先校验你提交上来的那个值是否在组件初始化时候提供的待选项内，如果不是待选项中的某个则直接生命周期最后阶段并忽略了中间的所有处理，包括你的方法绑定，这个问题很隐蔽，一般很难发现，这个校验个人认为为客户端使用AJAX带来了很大的麻烦，动态修改下来菜单的选项是很普通的ajax应用了（比如多级联动下拉菜单），为了给SelectOneMenu提供ajax能力我不得不重新实现了一个SelectOneMenu，现在我把工程升级到JSF 1.2才发现JSF1.2的核心api正如官方所言没有重大改动，只是统一了EL，但同时我确发现JSF的一些“不重要”的API改动确很大，我自己开发的组件用了1.1中的**util类，可是现在发现那些静态方法现在都没有了，这时不得不再次重新写一个SelectOneMenu,这回一点儿它的**util类也不用，免的下回升级还重写。<br /><br />三，JSF 1.1 RI中的commandLink居然把dom中的onClick()自己占用了，发现JSF1.2 RI又还回来了，这点还是做的不错的，不过却发现JSF组件ID系统自动生成的算法改了，1.1中如果你没有给页面上的组件指定ID那么JSF会按照某种算法自动生成一个，可是1.2中不但为这个自动生成id的行为增加了一个“开关”，而且生成算法也改了，这回麻烦大了，当初项目组中很多成员比较懒，页面中的javascript直接就是用的那个自动生成的ID，这回生成算法一改页面中的大部分javascript都瘫痪了，唉，懒人啊！<br /><br />四，原来1.1与Spring整合的时候发现Spring提供的JSF变量解析器只能整合MyFaces，不得不使用了jsf-spring.jar进行jsf RI+spring整合,现在突然发现JSF 1.2 RI终于可以直接使用spring的变量解析器进行整合了，这点儿还是不错的。表扬一下！<br /><br />五，原来项目中的上传下载使用了MyFaces的tomahawk组件包中的部分组件，可是到apache的网战上一看虽然MyFaces-core出了1.2版本，但是tomahawk还仍然停留在1.1，唉！组件版本不兼容的烦恼啊！
          <br/>
          <span style="color:red;">
            <a href="http://anranran.javaeye.com/blog/155288#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Jan 2008 17:31:50 +0800</pubDate>
        <link>http://anranran.javaeye.com/blog/155288</link>
        <guid>http://anranran.javaeye.com/blog/155288</guid>
      </item>
      <item>
        <title>权限控制(转)</title>
        <author>anranran</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://anranran.javaeye.com">anranran</a>&nbsp;
          链接：<a href="http://anranran.javaeye.com/blog/155278" style="color:red;">http://anranran.javaeye.com/blog/155278</a>&nbsp;
          发表时间: 2008年01月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用的是通过filter过滤来管理权限的方法， 很简单，但也很实用。 这个项目并不小，但这么一个类就已经可以满足其权限管理的需要了，所以其实很多时候，权限管理大家并不必要想得那么复杂， 对于不少系统，简单通过filter来管理就ok了, simple 也是一种美^_^ 在web.xml里加入 <br /><br /><br /><br />&lt;!--================权限 设置================-->      <br />&lt;filter>      <br />   <br />    &lt;filter-name>Authentication&lt;/filter-name>      <br />   <br />&lt;filter-class>com.springside.demo.security.UrlFilter&lt;/filter-class>      <br />   <br />    &lt;init-param>      <br />   <br />        &lt;param-name>onError&lt;/param-name>      <br />   <br />        &lt;param-value>/login.jsp&lt;/param-value>      <br />   <br />    &lt;/init-param>      <br />   <br />&lt;/filter>      <br />   <br />&lt;filter-mapping>      <br />   <br />    &lt;filter-name>Authentication&lt;/filter-name>      <br />   <br />    &lt;!-- 只过滤 .jsp 结尾的url, 其余的如 .do, .html, .jpg, .css 等不作过滤-->      <br />   <br />    &lt;url-pattern>*.jsp&lt;/url-pattern>      <br />   <br />&lt;/filter-mapping> <br />public class UrlFilter implements Filter {        <br />   <br />    private FilterConfig filterConfig;       <br />   <br />      <br />   <br />    private FilterChain chain;       <br />   <br />      <br />   <br />    private HttpServletRequest request;       <br />   <br />      <br />   <br />    private HttpServletResponse response;       <br />   <br />      <br />   <br />    public void destroy() {       <br />   <br />        this.filterConfig = null;       <br />   <br />    }       <br />   <br />      <br />   <br />    public void init(FilterConfig filterConfig) throws ServletException {       <br />   <br />        this.filterConfig = filterConfig;       <br />   <br />    }       <br />   <br />      <br />   <br />    public void doFilter(ServletRequest servletRequest,       <br />   <br />            ServletResponse servletResponse, FilterChain chain)       <br />   <br />            throws IOException, ServletException {       <br />   <br />        this.chain = chain;       <br />   <br />        this.request = (HttpServletRequest) servletRequest;       <br />   <br />        this.response = ((HttpServletResponse) servletResponse);       <br />   <br />      <br />   <br />        String url = request.getServletPath();       <br />   <br />        if (url == null)       <br />   <br />            url = "";       <br />   <br />      <br />   <br />        // 获取session中的loginuser对象       <br />   <br />        HttpSession session = request.getSession();       <br />   <br />        LoginUser loginuser = (LoginUser) session.getAttribute("loginuser");       <br />   <br />      <br />   <br />        if (baseUrl(url, request)) {       <br />   <br />            // 如果是登陆界面等无须权限访问的的公用界面则跳过       <br />   <br />            chain.doFilter(request, response);       <br />   <br />        } else if (loginuser == null) {       <br />   <br />            checkLogin(url);       <br />   <br />        } else {       <br />   <br />            verifyUrl(url, loginuser);       <br />   <br />        }       <br />   <br />    }       <br />   <br />      <br />   <br />    private void checkLogin(String url) throws ServletException, IOException {       <br />   <br />        // 如果session中获取不到 loginuser 对象，要不就是session 过期了，要不就是还没登陆。所以返回登陆界面       <br />   <br />        // 在登陆后记得把 loginuser 对象置于 session中       <br />   <br />      <br />   <br />        if (url.indexOf("/index.jsp") >= 0      <br />   <br />                && "login".equals(request.getParameter("act"))) {       <br />   <br />            // 获取request中username,password       <br />   <br />            String username = request.getParameter("username");       <br />   <br />            String password = request.getParameter("password");       <br />   <br />            UserDao userDao = new UserDao();       <br />   <br />            if (userDao.authUser(username, password)) {       <br />   <br />                LoginUser user = userDao.getUser(username);       <br />   <br />                request.getSession().setAttribute("loginuser", user);       <br />   <br />                verifyUrl(url,user);       <br />   <br />                return;       <br />   <br />            }       <br />   <br />        }       <br />   <br />        response.sendRedirect("login.jsp");       <br />   <br />    }       <br />   <br />      <br />   <br />    private void verifyUrl(String url, LoginUser loginuser)       <br />   <br />            throws IOException, ServletException {       <br />   <br />        // 获取 loginuser 拥有的所有资源串       <br />   <br />        Set royurl = loginuser.getResStrings();       <br />   <br />        if (royurl != null && royurl.size() > 0 && pass(royurl, url, request.getParameterMap())) {       <br />   <br />            chain.doFilter(request, response);       <br />   <br />        } else {       <br />   <br />            response.setContentType("text/html;charset=GBK");       <br />   <br />            response       <br />   <br />                    .getWriter()       <br />   <br />                    .println(       <br />   <br />                            "&lt;div style='margin: 100 auto;text-align: center;"      <br />   <br />                                    + "font: bold 18px 宋体;color: #0066CC;vertical-align: middle'> Sorry,您没有权限访问该资源!&lt;/div>");       <br />   <br />        }       <br />   <br />    }       <br />   <br />      <br />   <br />    /**     <br />  <br />     * 判断是否是公用界面     <br />  <br />     */      <br />   <br />    protected boolean baseUrl(String url, HttpServletRequest request) {       <br />   <br />        if (url.indexOf("/login.jsp") >= 0) {       <br />   <br />            return true;       <br />   <br />        }       <br />   <br />        return false;       <br />   <br />    }       <br />   <br />      <br />   <br />    /**     <br />  <br />     * 判断该用户是否有权请求该url     <br />  <br />     *      <br />  <br />     * @param royurl     <br />  <br />     *            user拥有的授权的的url串集合     <br />  <br />     * @param url     <br />  <br />     *            当前请求的url     <br />  <br />     * @param reqmap     <br />  <br />     *            当前request的参数     <br />  <br />     * @return 是否通过该url     <br />  <br />     */      <br />   <br />    protected boolean pass(Set royurl, String url, Map reqmap) {       <br />   <br />        boolean match = true;       <br />   <br />        for (Iterator iter = royurl.iterator(); iter.hasNext();) {       <br />   <br />            // 获取资源       <br />   <br />            match = true;       <br />   <br />            String res_string = (String) iter.next();       <br />   <br />            if (res_string.indexOf("*") > 0) {       <br />   <br />                res_string = res_string.substring(0, res_string.indexOf("*"));       <br />   <br />                if (url.substring(0, res_string.length()).equalsIgnoreCase(       <br />   <br />                        res_string)) {       <br />   <br />                    return true; // 增加通配符比较       <br />   <br />                }       <br />   <br />            }       <br />   <br />            // 分割url与参数       <br />   <br />            String[] spw = res_string.split("\\?"); // 用"\\?" 转义后即可得到正确的结       <br />   <br />            if (!url.equalsIgnoreCase(spw[0])) {       <br />   <br />                match = false;       <br />   <br />            }       <br />   <br />            if (match && spw.length > 1) {       <br />   <br />                String[] spa = spw[1].split("\\&"); // 分拆各参数       <br />   <br />                for (int j = 0; j &lt; spa.length; j++) {       <br />   <br />                    String[] spe = spa[j].split("="); // 分拆键与值       <br />   <br />                    String key = spe[0];       <br />   <br />                    String value = "";       <br />   <br />                    if (spe.length > 1) {       <br />   <br />                        value = spe[1].trim();       <br />   <br />                    }       <br />   <br />      <br />   <br />                    // 轮询       <br />   <br />                    String[] values = (String[]) reqmap.get(key);       <br />   <br />                    if (values != null) {       <br />   <br />                        for (int k = 0; k &lt; values.length; k++) {       <br />   <br />                            if (value.equalsIgnoreCase(values[k])) {       <br />   <br />                                match = true;       <br />   <br />                                break;       <br />   <br />                            }       <br />   <br />                            match = false;       <br />   <br />                        }       <br />   <br />                        if (!match) {       <br />   <br />                            break;       <br />   <br />                        }       <br />   <br />                    }       <br />   <br />                }       <br />   <br />      <br />   <br />            }       <br />   <br />      <br />   <br />            if (match) {       <br />   <br />                break;       <br />   <br />            }       <br />   <br />        }       <br />   <br />        return match;       <br />   <br />    }       <br />   <br />      <br />   <br />    public static void main(String[] args) {       <br />   <br />        UrlFilter filter = new UrlFilter();       <br />   <br />        String url = "/baseProd/product.do";       <br />   <br />      <br />   <br />        Map reqmap = new HashMap();       <br />   <br />        // 当前请求productline参数是11,12       <br />   <br />        reqmap.put("productline", new String[] { "11", "12" });       <br />   <br />      <br />   <br />        String str;       <br />   <br />        Set royurl = new HashSet();       <br />   <br />      <br />   <br />        // 和授权的的url根本不同，false       <br />   <br />        royurl.add("/user.do?a=1&b=2");       <br />   <br />        System.out.println("match false:" + filter.pass(royurl, url, reqmap));       <br />   <br />        // 授权的请求参数13,14时 false       <br />   <br />        royurl.add("/baseProd/product.do?productline=13&productline=14");       <br />   <br />        System.out.println("match false:" + filter.pass(royurl, url, reqmap));       <br />   <br />        // 授权的请求参数11,13时 false       <br />   <br />        royurl.add("/baseProd/product.do?productline=11&productline=13");       <br />   <br />        System.out.println("match false:" + filter.pass(royurl, url, reqmap));       <br />   <br />      <br />   <br />        // 授权的请求参数11时 true       <br />   <br />        royurl.add("/baseProd/product.do?productline=11");       <br />   <br />        System.out.println("match true:" + filter.pass(royurl, url, reqmap));       <br />   <br />      <br />   <br />        // 参数的不论顺序 true       <br />   <br />        royurl.add("/baseProd/product.do?productline=12&productline=11");       <br />   <br />        System.out.println("match true:" + filter.pass(royurl, url, reqmap));       <br />   <br />      <br />   <br />        royurl.clear();       <br />   <br />        // 支持 "*" 号作通配符 true       <br />   <br />        royurl.add("/baseProd/product.do*");       <br />   <br />        System.out.println("match ture:" + filter.pass(royurl, url, reqmap));       <br />   <br />      <br />   <br />    }       <br />   <br />      <br />   <br />}      <br /><br />LoginUser 类:<br />public class LoginUser {       <br />    private String name;       <br />   <br />           <br />   <br />    //用户的授权url集合,如"/product.do?line=1&singer=2","/menu.do?son=1&son=2&son=3","/job.do*"       <br />   <br />    private Set resStrings;       <br />   <br />      <br />   <br />    public String getName() {       <br />   <br />        return name;       <br />   <br />    }       <br />   <br />      <br />   <br />    public void setName(String name) {       <br />   <br />        this.name = name;       <br />   <br />    }       <br />   <br />      <br />   <br />    public Set getResStrings() {       <br />   <br />        return resStrings;       <br />   <br />    }       <br />    <br />    public void setResStrings(Set resStrings) {       <br />   <br />        this.resStrings = resStrings;       <br />   <br />    }       <br />             <br />   <br />}
          <br/>
          <span style="color:red;">
            <a href="http://anranran.javaeye.com/blog/155278#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Jan 2008 16:40:38 +0800</pubDate>
        <link>http://anranran.javaeye.com/blog/155278</link>
        <guid>http://anranran.javaeye.com/blog/155278</guid>
      </item>
  </channel>
</rss>