使用 Struct2 框架的拦截器 实现权限管理功能

使用 Struct2 框架的拦截器 实现权限管理功能

      • 一、项目基本介绍
      • 二、项目环境搭建
      • 三、项目结构搭建
        • 3.1 前端 + 后端结构
        • 3.2 前端主要页面
        • 3.3 后端核心逻辑实现 (使用 struct2 拦截功能)

项目已经更新至:PowerManager

一、项目基本介绍

  1. 项目系统拥有三种用户类型

    1. 普通用户 (只具备信息查询的功能)
    2. 系统管理员 (只具备查询,添加,和修改的功能)
    3. 系统维护员 (具备所有功能,增删改查)
    4. 一些关键信息要隐藏
  2. 项目基本逻辑

    1. 具备最基本的登录功能
    2. 具备数据展示功能
    3. 项目侧重于权限管理功能,所以(增加,修改,删除功能并没有去实现)

二、项目环境搭建

  1. 开发工具 idea 2019 专业版, jdk 1.8
  2. 数据库 MySQL 5.7, 数据库可视化工具 SqlYog
  3. 使用 Maven 工具构架一个 Java Web 项目,并添加 Struct2 的依赖, 见 pom.xml
  4. 第三方 jar 包:jstl-1.2.jar + standard.jar + mysql 5.1.10 版本驱动
  5. 服务器版本:Tomcat 9
  6. 其他 Struct2 配置文件, BootStrap 支持

三、项目结构搭建

3.1 前端 + 后端结构

使用 Struct2 框架的拦截器 实现权限管理功能_第1张图片

3.2 前端主要页面

  1. 登录界面
    使用 Struct2 框架的拦截器 实现权限管理功能_第2张图片
  2. 主页
    使用 Struct2 框架的拦截器 实现权限管理功能_第3张图片
  3. 查询页面,其他页面类似
    使用 Struct2 框架的拦截器 实现权限管理功能_第4张图片
  4. 权限不足时,禁止访问页面
    使用 Struct2 框架的拦截器 实现权限管理功能_第5张图片

3.3 后端核心逻辑实现 (使用 struct2 拦截功能)

  1. web.xml 配置 struct2 的过滤器
<web-app>
  <display-name>Archetype Created Web Applicationdisplay-name>
  <filter>
    <filter-name>struts2filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilterfilter-class>
  filter>

  <filter-mapping>
    <filter-name>struts2filter-name>
    <url-pattern>*url-pattern>
  filter-mapping>

  <welcome-file-list>
    <welcome-file>login.jspwelcome-file>
  welcome-file-list>
web-app>
  1. structs.xml 配置

主要配置拦截器



<struts>
	<package name="aaaa" namespace="/" extends="struts-default">

		<interceptors>
			<interceptor name="m1" class="cn.gorit.interceptor.UserInterceptor">interceptor>
		interceptors>
		
		
		<action name="checkLogin" class="cn.gorit.action.LoginAction" method="checkLogin">
			<result name="success" type="redirect">/index.jspresult>
			<result name="wrong" type="redirect">/login.jspresult>
		action>
		
		
		<action name="getAllUser" class="cn.gorit.action.UserManagerAction" method="getAllUser">
			<result name="success" type="redirect">/show.jspresult>
		action>
		
		
		<action name="addUser" class="cn.gorit.action.UserManagerAction" method="addUser">
			<result name="success" type="redirect">/addUser.jspresult>
			<result name="error" type="redirect">/error.jspresult>
			<interceptor-ref name="m1">interceptor-ref>
			
			<interceptor-ref name="defaultStack">interceptor-ref>
		action>
		
		
		<action name="deleteUser" class="cn.gorit.action.UserManagerAction" method="deleteUser">
			<result name="success" type="redirect">/deleteUser.jspresult>
			<result name="error" type="redirect">/error.jspresult>
			<interceptor-ref name="m1">interceptor-ref>
			
			<interceptor-ref name="defaultStack">interceptor-ref>
		action>
		
		
		<action name="updateUser" class="cn.gorit.action.UserManagerAction" method="updateUser">
			<result name="success" type="redirect">/editUser.jspresult>
			<result name="error" type="redirect">/error.jspresult>
			<interceptor-ref name="m1">interceptor-ref>
			
			<interceptor-ref name="defaultStack">interceptor-ref>
		action>

	package>
	<constant name="struts.enable.DynamicMethodInvocation" value="true">constant>
struts>    
  1. 编写用户管理的逻辑 UserManagerAction
package cn.gorit.action;

import cn.gorit.dao.Impl.UserDaoImpl;
import cn.gorit.dao.UserDao;
import cn.gorit.entity.User;
import com.opensymphony.xwork2.ActionContext;

import java.util.ArrayList;
import java.util.Map;

// 用户管理
public class UserManagerAction {

    // 获取所有用户的操作
    public String getAllUser() {
        System.out.println("获取所有的用户~");
        ActionContext ac = ActionContext.getContext(); // struct2 相当于 session
        Map<String, Object> session = ac.getSession();
        UserDao dao = new UserDaoImpl();
        ArrayList<User> list = dao.queryAllUser();
        session.put("list",list);
        return "success";
    }

    public String addUser() {
        System.out.println("添加用户的操作~");
        ActionContext ac = ActionContext.getContext(); // struct2 相当于 session
        Map<String, Object> session = ac.getSession();
        UserDao dao = new UserDaoImpl();
        ArrayList<User> list = dao.queryAllUser();
        session.put("list",list);
        int status = (int) session.get("status");
        if (status == 2 || status == 3) {
            return "success";
        }
        return "error";
    }

    public String deleteUser() {
        System.out.println("删除用户的操作~");
        ActionContext ac = ActionContext.getContext(); // struct2 相当于 session
        Map<String, Object> session = ac.getSession();
        UserDao dao = new UserDaoImpl();
        ArrayList<User> list = dao.queryAllUser();
        session.put("list",list);
        int status = (int) session.get("status");
        if (status == 3) {
            return "success";
        }
        return "error";
    }

    public String updateUser() {
        System.out.println("更新用户的操作~");
        System.out.println("删除用户的操作~");
        ActionContext ac = ActionContext.getContext(); // struct2 相当于 session
        Map<String, Object> session = ac.getSession();
        UserDao dao = new UserDaoImpl();
        ArrayList<User> list = dao.queryAllUser();
        session.put("list",list);
        int status = (int) session.get("status");
        if (status == 2 || status == 3) {
            return "success";
        }
        return "error";
    }

}

  1. 编写类拦截器
package cn.gorit.interceptor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

import java.util.Map;

// 类户拦截器
public class UserInterceptor extends AbstractInterceptor {
	// 拦截器在上面的 structs.xml 都配置了
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        System.out.println("拦截器开始工作了~");
        String str = "error";
        ActionContext ac = arg0.getInvocationContext();
        Map<String,Object> session = ac.getSession();
        str = arg0.invoke();
        if (str.equals("error")) {
            session.put("error","你的权限不足,禁止访问该页面");
        }
        return str ;
    }
}
  1. 然后前端访问 UserManagerAction 的特定方法,会根据用户的 status 是否有 “有资格” 进行操权限操作,如果没有权限请求就会被拦截,跳转至 error.jsp 界面

如果有需要可以在这里看到项目信息:PowerManager

你可能感兴趣的:(java学习)