一.页面编码过滤器 

1.开发EncodingFilter.java文件,继承自javax.servlet.Filter: 
package bluemoon.crm.systemmanage.struts.Filter; 

import java.io.*; 
import javax.servlet.*; 

public class EncodingFilter implements Filter 
{ 
protected String encoding = null; 
protected FilterConfig config; 

public void init(FilterConfig filterConfig) throws ServletException 
{ 
this.config = filterConfig; 
//从web.xml配置文件中获取编码配置 
this.encoding = filterConfig.getInitParameter("Encoding"); 
} 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
{ 
if(request.getCharacterEncoding() == null) 
{ 
String encode = getEncoding(); 
if(encode != null) 
{ 
//设置request的编码方式 
request.setCharacterEncoding(encode); 
} 
} 
chain.doFilter(request,response); 
} 
public String getEncoding() 
{ 
return encoding; 
} 
public void destroy() 
{ 

} 
} 
2. 在web.xml文件中加入如下配置信息: 
<!-- 页面请求编码过滤器 注意每个页面的pageEncoding="GB2312" --> 
<filter> 
<filter-name>encodingFilter</filter-name> 
<filter-class>bluemoon.crm.systemmanage.struts.Filter.EncodingFilter</filter-class> 
<init-param> 
<param-name>Encoding</param-name> 
<param-value>GB2312</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>encodingFilter</filter-name> 
<!-- 对全部的jsp页面有效,比较郁闷的是没有太多的配置方式 --> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 
<!--页面请求编码过滤器结束--> 

 

二.用户是否登陆过滤器: 
1.首先增加一个Action、ActionForm & JSP: 
login.jsp中为一个登陆表单: 
UserActionForm.java为一个Struts的ActionForm。 
UserAction.java将用户登陆信息添加到session中。 
2. 开发UserLoginedFilter.java: 
package bluemoon.crm.systemmanage.struts.Filter; 

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.*; 

import bluemoon.crm.systemmanage.struts.forms.UserActionForm; 

public class UserLoginedFilter extends HttpServlet implements Filter 
{ 
protected FilterConfig config; 

public void init(FilterConfig filterConfig) throws ServletException 
{ 
this.config = filterConfig; 
} 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
{ 
RequestDispatcher dispatcher = request.getRequestDispatcher("userLogin.jsp"); 
HttpServletRequest userRequest = (HttpServletRequest)request; 
UserActionForm userActionForm = (UserActionForm)userRequest.getSession().getAttribute("userActionForm"); 
if(userActionForm == null || userActionForm.getUser_name() == null || userActionForm.getUser_name().trim().length()<1) 
{ 
System.out.println("用户未登录!"); 
dispatcher.forward(request,response); 
return; 
} 
System.out.println("用户已登录!"); 
chain.doFilter(request,response); 
} 
public void destroy() 
{ 

} 
} 
3.在web.xml文件中添加如下配置信息: 
<!—用户是否登陆过滤器配置 注意只过虑jsp页面,不过虑.do --> 
<filter> 
<filter-name>userLoginedFilter</filter-name> 
<filter-class>bluemoon.crm.systemmanage.struts.Filter.UserLoginedFilter</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>userLoginedFilter</filter-name> 
<url-pattern>*.jsp</url-pattern> 
</filter-mapping> 
<!—用户是否登陆过滤器配置结束 --> 

1.首先写一个权限过滤filter类,实现Filter接口 

public class RightFilter implements Filter { 
     public void init(FilterConfig filterConfig) throws ServletException { } 
public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException { 

HttpServletRequest req = (HttpServletRequest) request; 
HttpServletResponse res = (HttpServletResponse) response; 
HttpSession session = req.getSession(true); 
String path = req.getRequestURI(); 

// 从session里取的用户名信息 
String userid= (String) session.getAttribute("userid"); 
for (int i = 0; i < Constants.NoFilter_Pages.length; i++) { 
if (path.indexOf(Constants.NoFilter_Pages[i]) > -1) { 
   chain.doFilter(req, res); 
   return; 
} 
} 
if (username == null || "".equals(username)) { 
// 跳转到登陆页面 
res.sendRedirect("http://"+req.getHeader("Host")+"/task/login.jsp");; 
} else { 
// 已经登陆,继续此次请求 
chain.doFilter(request, response); 
} 
} 

public void destroy() { } 
} 


public class Constants { 
public Constants() { 
} 

public static String[] NoFilter_Pages = { 
    "/index.jsp", 
    "/login.jsp", 
    
}; 
} 



2.然后在web.xml里配置需要登陆权限验证的JSP文件: 

a.如果是某个具体的JSP文件(如a.jsp)需要登陆验证 

<web-app> 


... 

<filter> 
<filter-name>right</filter-name> 
    <filter-class>com.dayou.util.RightFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>right</filter-name> 
    <url-pattern>/a.jsp</url-pattern> 
</filter-mapping> 
... 

</web-app> 


b.如果是某一个目录(如pages/目录)整个目录下的文件都需要登陆验证: 

<web-app> 

... 

<filter> 
      <filter-name>right</filter-name> 
<filter-class>com.dayou.util.RightFilter</filter-class> 
      </filter> 

<filter-mapping> 
<filter-name>right</filter-name> 
      <url-pattern>/pages/*</url-pattern> 
</filter-mapping> 
     ... 
</web-app> 

----------------------------------------------- 

来自: http://hi.baidu.com/yangjinbo/blog/item/98dd85cb18e840f552664f27.html