javaweb中添加过滤器,限制访问某些页面
问题:
在javaweb开发中,经常需要限制用户访问的权限,当用户未登录时,不能直接访问页面。
实现功能可以使用以下两种方法:
1.将需要限制访问的文件放入web-inf目录下,通过action来跳转,来达到未登陆无法访问的目的。
但是注意:资源文件不要放入,否则资源文件将无法被访问
因为资源文件不能通过action来访问,例如 :图片,文本等
2.可以通过过滤器来现在访问:
添加过滤器类:
LogonFilter.java
package cn.itcast.elec.filter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.itcast.elec.domain.ElecUser; public class LogonFilter implements Filter { //需要定义系统页面访问中可放行的连接 private List<String> list = new ArrayList<String>(); public void init(FilterConfig arg0) throws ServletException { list.add("/index.jsp"); list.add("/image.jsp"); list.add("/system/elecMenuAction_home.do"); //定义不被拦截的页面 } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //1、获取页面中的访问的路径连接 String path = request.getServletPath(); if(list!=null && list.contains(path)){ //如果页面中获取的访问连接于定义的可放行的连接一致,则放行 chain.doFilter(request, response); return; } //2、从session(globle_user)对象中获取当前登录的用户 ElecUser elecUser = (ElecUser) request.getSession().getAttribute("globle_user"); if(elecUser!=null){ //如果从session中获取的用户对象不为空,则放行 chain.doFilter(request, response); return; } //如果不满足条件1和2,则不能放行,回到系统的登录页面 response.sendRedirect(request.getContextPath()+"/"); } public void destroy() { } }然后在web.xml文件中配置:
<!-- 2011-12-30,系统中添加过滤器 --> <filter> <filter-name>filter</filter-name> <filter-class>cn.itcast.elec.filter.LogonFilter</filter-class> //过滤器类的路径 </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>*.do</url-pattern> //限制的文件类型 </filter-mapping> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
例如:如果现在根目录下的images目录的文件不被访问使用以下代码
<filter-mapping> <filter-name>filter</filter-name> <url-pattern>/images/*</url-pattern> </filter-mapping>