使用Filter控制url访问权限

public class ForumFilter implements Filter {

    private static final String[] UNLOGIN_URIS = {"/index.jsp","/index.do","/login.jsp","/login/doLogin.do","/register.jsp",
                                                                "/register.do","/board/listBoardTopics-","/board/listTopicPosts-"};

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

         HttpServletRequest request = (HttpServletRequest) servletRequest;
         User user = getSessionUser(request);
         if (user==null && !isURILogin(request.getRequestURI(),request)){
             String toUrl = request.getRequestURI();
             if (!StringUtils.isEmpty(request.getQueryString())){
                  toUrl += "?" + request.getQueryString();
              }
              request.getSession().setAttribute(Define.LOGIN_TO_URL,toUrl);
              request.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
              return;
          }
          filterChain.doFilter(servletRequest,servletResponse);
        }

    }
    protected User getSessionUser(HttpServletRequest request) {
        return (User) request.getSession().getAttribute(Define.UserLine);
    }

    public void destroy() {
    }

    protected boolean isURILogin(String requestURI,HttpServletRequest request){
        if (request.getContextPath().equalsIgnoreCase(requestURI)
                || (request.getContextPath() + "/").equalsIgnoreCase(requestURI))
            return true;
        for (String uri : UNLOGIN_URIS) {
            if (requestURI != null && requestURI.indexOf(uri) >= 0) {
                return true;
            }
        }
        return false;
    }
}
  1. 实现Filter接口,重写doFilter方法。
  2. 将ServletRequest转成HttpServletRequest并且获取session中的用户。
  3. 如果存在用户或者访问的url是可以不登入就可访问的,即已经登入成功了,那就直接doFilter();
  4. 如果不存在,那就保存当前要访问的url,然后跳转到登入界面,如果登入成功再跳回此url。

getContextPath():得到当前应用的根目录

在一些应用中,未登录用户请求了必须登录的资源时,提示用户登录,此时要记住用户访问的当前页面的URL,当他登录成功后根据记住的URL跳回用户最后访问的页面:

String lastAccessUrl = request.getRequestURI() + "?" + request.getQueryString();

时间: 2024-10-10 06:00:45

使用Filter控制url访问权限的相关文章

Chapter6_访问权限控制_访问权限修饰词

Java中有四种访问权限,public,private,protected和包访问权限,它们是置于类中每一个成员之前的定义,无论是一个域还是一个方法,下面一一介绍. 一.包访问权限 如果不提供任何访问权限修饰词,这意味着是包访问权限.即当前包中的所有其他类对那个包访问权限的成员都有访问权限,但对于这个包之外的所有类,这个类是private的,所以处于一个编译单元中的所有类之间,都是可以互相访问的.包访问权限允许将包内所有的类组合起来,以便于它们之间可以轻松地相互访问.总的来说,取得对某成员的访问

iOS开发------------>>>URL访问权限问题

在info.plist文件里面添加代码 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

关于C++类中访问权限的若干疑问(虚函数访问权限)

下面这样一个程序:(以下程序都是在VS2010下实现) 1: class Base 2: { 3: public: 4: virtual void func() 5: { 6: cout<<"Base virtual func"<<endl; 7: } 8: }; 9: 10: class Derived: public Base 11: { 12: private: 13: virtual void func() 14: { 15: cout<<&

在ASP.NET MVC中实现基于URL的权限控制

本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度低,并且实现起来也比较简单.缺点是权限控制不够精确,不能具体到某一具体的按钮或者某一功能. 在数据库中新建2个表.PermissionItem表用于保存权限ID和页面路径的关系,一个权限ID可以有多个页面,一般同一个权限ID下的页面是为了实现同一个功能.PermissionList表用于保存用户所具

使用nginx和iptables做访问权限控制(IP和MAC)

之前配置的服务器,相当于对整个内网都是公开的 而且,除了可以通过80端口的nginx来间接访问各项服务,也可以绕过nginx,直接ip地址加端口访问对应服务 这是不对的啊,所以我们要做一些限制 因为只是对特定的人提供服务,而且局域网IP和MAC都是固定的,所以可以直接用白名单,其他的全部拒绝 /**************************************使用nginx做访问权限控制*********************************/ 先在nginx做设置 在/et

Apache Solr 访问权限控制

Current state of affairs SSL support was added in version 4.2 (SolrCloud v4.7). Protection of Zookeeper content through ACLs was added in version 5.0 Authentication and Authorization plugin support was added in 5.2 (SolrCloud only) Basic Auth & Kerbe

访问权限控制

对于一个网站来说,访问权限控制包含2部分, 1:控制是否要用户登录,才可以访问到网站. (在YII框架里,使用UserIdentity类来用户名,密码方式登录,再通过Yii::app()->user->login(UserIdentity实例)/logout()方法来登录和退出) 2:控制登录后的用户,符合哪些条件才能访问某些控制器或者某些方法. (简单的访问控制过滤可以重载CController::filters 方法,这种方式基于用户名,客户IP地址,和访问类型) public funct

CloudStack API访问权限控制

在我写开始之前,请先看下CS中国社区的一篇文章http://www.cloudstack-china.org/2012/12/1465.html,在第1点里讲了关于权限级别,command属性文件位置等问题.不过4.3现在的除了command.properties外,作者提到的其它properties文件现在好像都没有了,而且command里面现在形如***command=15,"="后面不再有处理请求命令的类. API请求由ApiServlet拦截后,会调用verifyRequest

&#8203;web服务目录的访问权限的控制

web服务目录的访问权限的控制 1.确认web服务器已经安装并启动 [[email protected] ~]# ls /usr/local/httpd/ [[email protected] ~]# netstat -utpln |grep 80 tcp        0      0 :::80                       :::*                        LISTEN      73341/httpd 2.设置只允许192.168.100.110访问,