我的目录结构如下
admin 目录
user 目录
index.jspindex.jsp是登陆页面,我需要控制:
1、当未登录的情况下,只能访问index.jsp
2、登陆后可以访问user目录,admin目录仍然不允许访问请问过滤器应该怎么写,谢谢各位
admin 目录
user 目录
index.jspindex.jsp是登陆页面,我需要控制:
1、当未登录的情况下,只能访问index.jsp
2、登陆后可以访问user目录,admin目录仍然不允许访问请问过滤器应该怎么写,谢谢各位
解决方案 »
- spring 高级查询 detached criteria
- 难!超难!!如何关闭cgi做的系统??除了用页面直接访问
- Hibernate中手写的login.hbm.xml文件怎么无法读取啊?
- 介绍几本关于电子商务系统的书
- linux 下的weblogic,连接oracle,系统无法登陆,请大家帮帮忙,谢谢
- struts 2.0 文件名过长下载乱码
- 关于连接sqlserver的奇怪问题
- 环境:JBOSS3+SQLSERVER;异常:(javax.ejb.EJBException: Can't start a cloned connection while in manual transaction mode)高手救
- BMP EJB 问题集
- ifram弹出层相关问题
- 请各位大虾帮忙,连接问题
- Hibernate Criteria用法
case 1://user root
req.getRequestDispatcher("/user/***.jsp").forward(req, res)
case 2://admin root
req.getRequestDispatcher("/admin/***.jsp").forward(req, res)
case 3://is login
req.getRequestDispatcher("/index.jsp").forward(req, res)
}
/admin/***.jsp 星号代表通配符吗,还是只是示意
如果不是通配符,那如果有N个页面怎么办呢
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 javax.servlet.http.HttpSession;import org.apache.log4j.Logger;import com.iwit.noteService.bean.Admin;
import com.iwit.noteService.bean.Function;
import com.iwit.noteService.dao.DaoFactory;/**
*
* @author luhang E-mail:[email protected]
* @version 创建时间:Aug 27, 2009 3:29:53 PM
*
*/
public class PageFilter implements Filter{
Logger log = Logger.getLogger(PageFilter.class);
private FilterConfig filterConfig; private FilterChain chain; private HttpServletRequest request; private HttpServletResponse response;
private HttpSession session; public void init(FilterConfig filterConfig) throws ServletException {
} public void destroy() {
} public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
// 传递控制到下一个过滤器
//chain.doFilter(request, response); this.chain = chain; this.request = (HttpServletRequest) servletRequest;
request.setCharacterEncoding("GBK"); // 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest this.response = ((HttpServletResponse) servletResponse); // 获取当前页面文件名此处url为:/Gzlkh/login.jsp String url = request.getRequestURI();
// 此处截取的url为:login.jsp url = url.substring(url.lastIndexOf("/") + 1, url.length());
//log.info("JSP:"+url);
try { // 排除后台不作权限控制的页面名 // 登陆页面无需验证文件 this.session = request.getSession(); // 获取网站访问根目录 String accessPath = request.getContextPath();// Admin admin = (Admin) session.getAttribute("admin"); if (noFileUrl(url, request)) { // 不需要判断权限的请求如登录页面,则跳过
log.info("Pass:"+url);
chain.doFilter(request, response); } else if (session.getAttribute("admin") == null) {//判断是否登陆
log.info("Unlo:"+url);
response.sendRedirect(accessPath + "/index.jsp");// 返回登陆页面(未登录或超时) } else {//如果已经登陆,则开始判断权限
verifyUrl("@"+url);// 判断当前user是否拥有访问此url的权限 } } catch (Exception sx) { sx.printStackTrace(); } } /**
*
* @param url
*
* 当前请求的url
*
* @param user
*
* 当前登录用户
*
* @throws IOException
*
* @throws ServletException
*
*/ private void verifyUrl(String url) throws IOException,
ServletException {
String methodAtURL=(String)session.getAttribute("methodAtURL");
log.debug(methodAtURL);
if (methodAtURL!=null && methodAtURL.indexOf(url) >= 0) {
log.info("Acce:"+url);
chain.doFilter(request, response);
} else {
log.info("Forb:"+url);
response.setContentType("text/html;charset=GBK");
response.getWriter().println("<div style='margin: 100 auto;text-align: center;background-image:url(images/bg.jpg); " + "font: bold 18px 宋体;color: #0066CC;vertical-align: middle'> Sorry,您没有权限访问该资源!</div>"); } } /**
*
* 是否需要判断权限,如客户端浏览、登录页面则不需要判断权限
*
*/ protected boolean noFileUrl(String url, HttpServletRequest request) { String exclude = "index.jsp"; if (exclude.indexOf(url) >= 0) { return true;// 不需要判断 } return false; }
}这是我正在用作权限判断的一个JSP页面过滤器~