JSP权限控制(二)
|
1 )首先建立管理用户表,其中 UserPopedom 记录用户的权限字符,其实也就是一些 JSP 或者 ACTION 的文件名: <%@ taglib uri = "webwork" prefix = "ww" %> < ww:bean name = "'com.wake.util.PopedomValidate'" id = "pd" /> < ww:if test = '#pd.UserPopedomValidate("News")' > 新闻栏目 < br > </ ww:if > 对于资源(页面)的操作控制我是使用 Filter 来进行控制的, Filter 源码如下。 package com.wake.util; 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; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.wake.bean.AdminUser; /** * @author Administrator * */ public class PopedomControl extends HttpServlet implements Filter { /** * */ private FilterConfig filterConfig; private static final long serialVersionUID = -4275105240038370264L; /* * (非 Javadoc ) * * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ public void init(FilterConfig arg0) throws ServletException { } /* * (非 Javadoc ) * * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, * javax.servlet.ServletResponse, javax.servlet.FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { HttpServletRequest servletRequest = (HttpServletRequest) request; HttpServletResponse servletResponse = (HttpServletResponse) response; HttpSession session = servletRequest.getSession(); // 获取当前页面文件名 String url = servletRequest.getRequestURI(); url = url.substring(url.lastIndexOf("/") + 1, url.length()); try { // 排除后台不作权限控制的页面名 String exclude= "adminlogin.action,login.jsp,Message.jsp,loginout.jsp"; if(exclude.indexOf(url)==-1){ // 获取网站访问根目录 String accessPath = servletRequest.getContextPath(); // 用当前页面文件名与用户权限字符比较 AdminUser adminuser = (AdminUser) session.getAttribute("auser"); if (adminuser == null) { servletResponse.sendRedirect(accessPath + "/admin/login.jsp"); }else if(adminuser.getUserPopedom().indexOf(url)==-1){ servletResponse.sendRedirect(accessPath + "/admin/Message.jsp"); } } } catch (Exception sx) { sx.printStackTrace(); } try { filterChain.doFilter(request, response); } catch (ServletException sx) { filterConfig.getServletContext().log(sx.getMessage()); } catch (IOException iox) { filterConfig.getServletContext().log(iox.getMessage()); } } public void destroy() { } } WEB.XML 关于过滤器配置 < filter > < filter-name > popedomcontrol </ filter-name > < filter-class > com.wake.util.PopedomControl </ filter-class > </ filter > < filter-mapping > < filter-name > popedomcontrol </ filter-name > < url-pattern > /admin/* </ url-pattern > </ filter-mapping > 这样不知道大家看明白没有 … 这次这个简单的权限设计从开始到完成断断续续用了将近 3 天的时间,一切都是在摸索中进行。其实上面的设计思路经过优化和复杂化也可以设计为符合 RBAC 规范的例子。那需要我们在用户和权限之间再加一个基本的角色进去。这样用户对应的是角色,而角色去对应权限。至于其它的就由我们自己自由发挥了呵呵,这次关于权限的试验就到此了,让大家见笑了。 在评论中有位仁兄的见解也非常不错!下面就给大家看一下:建个资源文件,以数字对应文件,再进行验证。见过有一个系统曾是这样设计。 Tags:
JSP权限控制(二)
|
一共有 0 条评论