问题:
在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>