实现权限控制的几种方式

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!


方式一:struts1.x

    步骤一:定义。自定义一个类继承RequestProcessor类,然后重写父类的public void process(HttpServletRequest request, HttpServletResponse response)方法,此类和ActionServlet的作用一样的,是处理请求的控制器组件,其是被ActionServlet调用处理请求的。即在进入ActionForm和Action之前处理的请求。如:

  

package edu.process;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
public class RequestCharacterProcessor extends RequestProcessor {
    @Override
    public void process(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        //response.setContentType("text/html; charset=utf-8");
        //用session作用域user属性来标识用户是否登录
       Object value = request.getSession().getAttribute("user");
       //判断是否登录
       if (value!=null) {
         //下句是一定要执行的,其意思是将请求交给下面的控制器。
              super.process(request, response);
              System.out.println("ddddddddddddddd");//响应回来时,会执行。
        }else {
            //没登陆的话则重定向至登录界面
             response.sendRedirect("/login");
        }
        
    }
}    

   步骤二:注册.自定义的RequestProcessor类需要在strusts-config.xml中注册。如:

在struts-config.xml中的映射:
 <controller processorClass="edu.encoding.RequestChinese"></controller>
或者:
 <controller>
     <set-property property="processorClass" value="edu.encoding.RequestChinese"/>
 </controller>

   注意:

       (1)process()方法是在填充FormBean和调用Action的execute()之前进行的。

       (2)此种方式的权限控制可用于处理请求字符集,响应字符集等,super.process(request,response);之后的代码为响应来时的代码。(经过验证的,这里不写详细代码了)。

       (3)struts1.x的这种权限控制只能过滤*.do(假设action的url-pattern为*.do)的请求,并不能过滤*.jsp,*.html的文件。

       (4)缺陷:所有*.do的请求都会不例外的请求该处理器。


方式二:定义过滤器filter

      步骤一:自定义过滤器类,实现Filter接口并重写器doFilter()方法,在doFilter()进行权限控制,如果交由下一个过滤器或Action或Servlet的话,就调用chain.doFilter(request,response)方法,chain.doFilter()后的代码会在响应回来时调用

package edu.filter;

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;
public class PermissionFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("处理请求代码...");
		//只有下面的代码执行了,才能将请求交给下一个过滤器或Servlet或Action
		chain.doFilter(request, response);
		System.out.println("处理响应代码...");

	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

}

      步骤二:在web.xml中注册,在url-pattern中可以为不同格式的请求注册不同的过滤器。

  <filter>
     <filter-name>permission</filter-name>
     <filter-class>edu.filter.PermissionFilter</filter-class>
  </filter>
  <filter-mapping>
     <filter-name>permission</filter-name>
     <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

方式三: struts2中自定义拦截器: 参见:Struts2实现权限控制



你可能感兴趣的:(servlet,struts,filter,Class,action)