zoukankan      html  css  js  c++  java
  • 权限设置

    第一种方式:利用filter、xml文件和用户信息表配合使用来实现权限管理。

      1.过滤器filter

      package cn.com.aaa.bbb.filter;

      import java.io.IOException;

      import java.io.InputStream;

      import java.util.HashMap;

      import java.util.Iterator;

      import java.util.List;

      import java.util.Map;

      import javax.servlet.Filter;

      import javax.servlet.FilterChain;

      import javax.servlet.FilterConfig;

      import javax.servlet.ServletContext;

      import javax.servlet.ServletException;

      import javax.servlet.ServletRequest;

      import javax.servlet.ServletResponse;

      import javax.servlet.http.HttpServletRequest;

      import javax.servlet.http.HttpServletResponse;

      import org.apache.commons.logging.Log;

      import org.apache.commons.logging.LogFactory;

      import org.dom4j.Document;

      import org.dom4j.Element;

      import org.dom4j.io.SAXReader;

      import cn.com.aaa.bbb.domain.User;

      import cn.com.aaa.bbb.util.HttpUtils;

      /**

      * 过滤:后台管理的模块授权。根据:配置文件xml,根据当前session中用的管理员信息。

      * 注:不用再访问数据库。也不需要再使用什么 bean 去判断。直接在这个类里就可以判断。

      * @author cuiguangqiang

      *

      */

      public class ManagerAuthFilter implements Filter {

      protected static final Log logger = LogFactory.getLog(ManagerAuthFilter.class);

      public static final String MAPPING_FILE = "/WEB-INF/managerauthmapping.xml";

      private ServletContext context = null;

      private Map actions = new HashMap();

      public void init(FilterConfig filterConfig) throws ServletException {

      context = filterConfig.getServletContext();

      if(context==null){

      logger.error("unable to init as servlet context is null");

      return;

      }

      loadConf();

      logger.info("ManagerAuthFilter configure success.");

      }

      private void loadConf() {

      InputStream inputStream = context.getResourceAsStream(MAPPING_FILE);

      if (inputStream == null) {

      logger.info("unable find auth mapping file " + MAPPING_FILE);

      } else {

      actions = parseConf(inputStream);

      }

      }

      private Map parseConf(InputStream inputStream) {

      try {

      SAXReader reader = new SAXReader();

      Document document = reader.read(inputStream);

      return createActionMap(document);

      } catch (Exception e) {

      logger.info(e.getMessage());

      e.printStackTrace();

      }

      return new HashMap();

      }

      private Map createActionMap(Document document) {

      Map map = new HashMap();

      Element root = document.getRootElement();

      //处理XML,读入JAVA Object对象中。

      List actionList = root.elements();

      for (Iterator it = actionList.iterator(); it.hasNext();) {

      Element e = (Element) it.next();

      String actionName = e.attributeValue("name");

      String auth_value = e.element("auth-value").getTextTrim();

      map.put(actionName,auth_value);

      logger.info(actionName + " is " + auth_value);

      }

      return map;

      }

      public void doFilter(ServletRequest request, ServletResponse response,

      FilterChain chain) throws IOException, ServletException {

      //处理某次提交的Action,是否在权限定义范围内

      //权限共有:1:站长;2:编辑;0:Admin ; all 代表所有人都可以。(均需要登录)

      HttpServletRequest req = (HttpServletRequest) request;

      HttpServletResponse resp = (HttpServletResponse) response;

      //(1)得到此次用户的提交请求

      String url = req.getServletPath();

      //(2)只有在配置文件中存在的 action 才进行处理

      String method = req.getParameter("method");

      if(method!=null){

      url = url + "?method=" + method;

      }

      String auth_value = (String)actions.get(url);

      if(auth_value==null){

      logger.info("action is not in Manager Auth xml.");

      chain.doFilter(request, response);

      return;

      }

      //第一,必须要登录

      // 取得当前用户;

      User manager = (User) HttpUtils.getAdminUserSession(req);

      // 检查管理用户是否登录

      if (manager == null) {

      resp.sendRedirect(req.getContextPath()+"/sessionLost.do");

      return;

      }

      //第二,必须在权限定义范围内

      if(auth_value.indexOf("all")>=0){

      chain.doFilter(request, response);//必须返回给上一层。

      return ;

      }

      else{

      //     String currUserAuth = ","+Integer.toString( manager.getLever())+",";

      String currUserAuth = Integer.toString( manager.getLever());

      if(auth_value.indexOf(currUserAuth)>=0){

      chain.doFilter(request, response);//必须返回给上一层。

      return ;

      }

      else{

      resp.sendRedirect(req.getContextPath()+"/accessdenied.do");

      return ;

      }

      }

      }

      public void destroy() {

      logger.info("in authfilter destroy");

      }

      }

      2.xml文件

      xml只给出了部分内容,不过所有的内容都包括了。

      <?xml version="1.0" encoding="UTF-8"?>

      <!--

      权限共有:0:Admin 具有所有权限包括增删改用户; 1:站长 ;2:编辑;

      -->

      <mapping>

      <!--xxxx管理模块xx列表,报名选手和历史比赛查询部分-->

      <action name="/listallmatch.do"><auth-value>0,1</auth-value></action>

      <action name="/matchManager.do"><auth-value>0,</auth-value></action>

      <action name="/rewrite.do"><auth-value>0,1</auth-value></action>

      <action name="/leftHome.do"><auth-value>all,</auth-value></action>

      <action name="/login.do"><auth-value>all,</auth-value></action>

      </mapping>

      3.用户表里面有一个用来保存用户级别的字段level,具体用户表的信息有以下内容,我用实体类来表示用户表的信息,因为没有表结构了。

      /** The composite primary key value.*/

      private String id;

      /**

      * 用户编号

      */

      private String userId;

      /** The value of the simple username property. */

      private String username;

      /** The value of the simple password property. */

      private String password;

      /**

      * 0:Admin;1:站长;2:编辑;

      */

      private int lever=1;

      /**

      * 创建用户的日期

      */

      private Date createDate;

      所有的操作都显示在页面上,当点击该操作时,才进行权限控制,抛出是否该用户有没有该功能的权限。

      第二种方式:利用专门的权限表来维护用户权限,根据登录的用户的权限信息判断谋个功能是否显示在页面上,来实现权限的控制。

      1.不用数据库表了,我用实体类的属性来表示。

      private String id;

      /**

      * 管理员id

      */

      private String employeeid;

      /**

      *管理功能id

      */

      private String urlid;

      /**

      * 功能名称

      */

      private String urlname;

      超级管理员给每一个用户分配权限,然后添加到该张表中。登录用户根据自己的权限可以判断是否显示该功能。

  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/yr0215/p/8022545.html
Copyright © 2011-2022 走看看