基于 SSM 的后台管理系统

基于 SSM 的后台管理系统(入门级 DEMO,适合新手) 前言: 使用 SpringMVC+Spring+Mybatis 以及 maven 的后台管理系统

本文包含相关资料包-----> 点击直达获取<-------

基于 SSM 的后台管理系统(入门级 DEMO,适合新手)

前言:

使用 SpringMVC+Spring+Mybatis 以及 maven 的后台管理系统,程序的结构分为表现层(Controller)、业务层(Service)、数据层(Dao),包括权限授权、分页查询、日志记录,订单及产品查询,授权管理等功能。入门级 DEMO,具备后台管理系统的通用特征,以后可以在别的后台系统中直接拿来用

技术点:

1、Spring IoC & DI(控制反转和依赖注入)

2、Spring AOC (切面编程)

3、Spring Security 进行用户登录与注销等安全授权

4、MyBatis dao 层半 ORM 数据库技术(单表查询、多表查询等)

5、MyBatis 插件 PageHelper,进行分页查询

6、方法级权限关联与控制(运用 Sercurity 标签等技术)

7、前端使用 AdminLTE 静态页面模板以及 jQuery 等技术

说明:

1、SSM 的配置还是比较繁琐的,不过作为入门级的 DEMO,还是有必要自己亲自配的

2、MyBatis 使用 XML 配置,DAO 层由于想要提高 SQL 部分的解耦程度,所以使用 XML 配置统一管理

3、Service 和 Controller 中由于不需要过多的配置、因此使用注解的方式进行依赖注入

运行结果:

先放两张图

项目结构图:

项目为多模块结构:domain 为实体层

流程:

1、引入依赖文件(pom.xml)

这里没什么好说的,要用什么引用什么 。

```html

4.0.0

<groupId>scau.zhong</groupId>
<artifactId>ssm_pratice</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

<properties>
    <!--版本锁定-->
    <mybatis.version>3.5.1</mybatis.version>
    <mysql.version>8.0.16</mysql.version>
    <log4j.version>1.2.12</log4j.version>
    <slf4j.version>1.6.6</slf4j.version>
    <spring.version>5.1.7.RELEASE</spring.version>
    <spring.security.version>5.0.1.RELEASE</spring.security.version>
</properties>

<dependencies>
    <!--spring全家桶-->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!--spring安全组件-->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${spring.security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>${spring.security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>${spring.security.version}</version>
    </dependency>
    <!--权限控制_页面控制-->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>${spring.security.version}</version>
    </dependency>

    <!--测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <!--mysql坐标-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
    </dependency>

    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.0</version>
    </dependency>

<!--servlet API-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- log start -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <!-- log end -->

    <!--数据库连接池C3P0-->
    <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.4</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>

    <!--分页插件-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.2</version>
    </dependency>

    <!--权限控制JSR250注解标签-->
    <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>jsr250-api</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>

<!--多模块项目-->
<modules>
    <module>ssm_dao</module>
    <module>ssm_service</module>
    <module>ssm_domain</module>
    <module>ssm_utils</module>
    <module>ssm_web</module>
</modules>

```

2、配置与整合

SSM 整合的关键是用 Spirng 去整合 SpirngMVC 以及 MyBatis,所以整合的基本流程是这样的:

1、配置 Spring

2、配置 MyBatis

3、配置 Spring mvc

4、整合 Spring 和 MyBatis

5、整合 Spring 和 SpringMVC

因为这里用到 Spring security 认证,所以还需要配置一个 Spring security,但不属于 SSM 范围内。

配置文件统一放在 Resources 目录下,方便管理

2.1 配置 Spring

1、新建一个 XML 文件 ,引入约束

```xml

```

2、开启注解扫描,dao 层不扫描,只扫描 service 和 controller 层

```xml

<context:component-scan base-package="service"/>

```

注意这里的 base-package 应该是全路径包名,我这里在 Java 目录下只有一个包所以只写了一层

2.2 配置 MyBatis

2.2.1 建立实体类与 dao 接口

具体的实体类代码和接口代码我就不贴出来了。

MyBatis 使用半 ORM 映射技术,不需要你自己实现 DAO 接口,它会自动帮你实现一个代理 dao 接口,其内部原理大概就是动态代理技术(基于接口)和 XML(注解)解析等

有了实体类,我们封装的对象就有了,有了接口,封装的 dao 方法就有了,现在要做的是就是对接口方法进行一个“增强”,也就是动态代理,这个 MyBatis 会自动帮我们实现,所以只需要进行 mapper 的配置来说明如何增强即可。

2.2.2 配置 mapper

MyBatis 中需要注意的一点是,mapper 配置必须与 dao 接口处于同一个包下或者具有相同的包结构

这里我将 XML 配置文件全部放置在 resources 目录下,所以必须和 dao 接口的包结构一致。

当然,你在开始一个项目的时候,不肯一下子配置这么多 mapper 的,都是你需要的时候再配就可以了。

在 mapper 中的配置、以 memberMapper 为例:

```xml

```

namespace 属性指定 dao 接口所在的 bao,id 是方法名,MyBatis 需要找到你要增强的方法的路径,合起来也就是

html dao.IMemberDao.findMemberById

其他的 mapper 也大同小异,就不贴出来了。

2.2.3 配置 MyBatis 全局配置文件

新建一个 XML 文件,

在这里主要配置数据源信息,mapper 信息等全局配置

```xml

```

会发现:我这里没有配置数据源信息,原因是没必要配(但你配了也无妨),因为之后在 Spring 整合 MyBatis 时,会在 Spring 中配置。

至此、MyBatis 的配置就完成了。

2.3 配置 SpringMVC

新建一个 XML 文件,用来配置 SpringMVC

2.3.1 引入约束

```xml

```

2.3.2 开启注解扫描

xml <!--开启注解扫描,只扫描Controller包下的注解--> <context:component-scan base-package="controller"/>

2.3.3 配置视图解析器

视图解析器也就是告诉前端控制器到哪去找视图(在这里是 JSP 文件)

xml <!--视图解析器--> <bean id="internalResourceViewResolver" class="e0f_e8ab_ab51c64 org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--prefix代表路径前缀--> <property name="prefix" value="/pages/"/> <!--suffix表示文件后缀--> <property name="suffix" value=".jsp"/> </bean>

需要注意的是这里的 id 是固定的,Spring 容器需要根据这个 id 找到这个视图解析器

2.3.3 配置静态资源不拦截

xml <!--告诉前端控制器哪些静态资源不拦截--> <!-- 设置静态资源不过滤 --> <mvc:resources location="/css/" mapping="/css/**" /> <mvc:resources location="/img/" mapping="/img/**" /> <mvc:resources location="/js/" mapping="/js/**" /> <mvc:resources location="/plugins/" mapping="/plugins/**" />

2.3.4 其他

```xml

<mvc:annotation-driven/>

<!--
支持AOP的注解支持,AOP底层使用代理技术
JDK动态代理,要求必须有接口
cglib代理,生成子类对象,proxy-target- 默认使用cglib的方式
-->
<aop:aspectj-autoproxy proxy-target-/>

```

2.4Spring 整合 MyBatis

回到刚才创建的 Spring 配置文件中,在这里整合 MyBatis

因为之前在 MyBatis 中未配置数据源信息,所以要在

Spring 中配置数据源:

xml <!--Spring整合mybatis--> <!--配置连接池--> <bean id="dataSource" class="vf8_0284_840f4d9 com.mchange.v2.c3p0.ComboPooledDataSource"> <!--注入数据库连接信息--> <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssm1?use Unicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/> <property name="user" value="root"/> <property name="password" value="root"/> </bean>

配置 sqlSession 工厂对象

```xml

<bean id="factory" >
  <!-- 配置pagerHelper插件,注意其他配置 -->
  <property name="plugins">
    <array>
      <bean >
        <property name="properties">
          <!--使用下面的方式配置参数,一行配置一个 -->
          <props>
            <prop key="helperDialect">mysql</prop>
            <prop key="reasonable">true</prop>
          </props>
        </property>
      </bean>
    </array>
  </property>

  <!--设置数据源-->
  <property name="dataSource" ref="dataSource"/>
  <!--映射mybatis全局配置文件-->
  <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
</bean>

```

配置事务管理

Spring 是有事务管理的,这点非常棒,这样你就不用利用 AOP 织入一个事务管理了

xml <!-- 配置Spring的声明式事务管理 --> <!-- 配置事务管理器 --> <bean id="transactionManager" class="z6a_2d46_466f8c5 org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:annotation-driven transaction-manager="transactionManager"/>

配置 MyBatis 的 Mapper,生成代理对象

xml <!--映射mapper文件,获取生成代理Dao--> <bean id="productMapper" > <property name="mapperInterface" value="dao.IProductDao"/> <property name="sqlSessionFactory" ref="factory"/> </bean> <bean id="orderMapper" > <property name="mapperInterface" value="dao.IOrdersDao"/> <property name="sqlSessionFactory" ref="factory"/> </bean> <bean id="userMapper" > <property name="mapperInterface" value="dao.IUserDao"/> <property name="sqlSessionFactory" ref="factory"/> </bean> <bean id="roleMapper" > <property name="mapperInterface" value="dao.IRoleDao"/> <property name="sqlSessionFactory" ref="factory"/> </bean> <bean id="permissionMapper" > <property name="mapperInterface" value="dao.IPermissionDao"/> <property name="sqlSessionFactory" ref="factory"/> </bean> <bean id="user_roleMapper" > <property name="mapperInterface" value="dao.IUser_RoleDao"/> <property name="sqlSessionFactory" ref="factory"/> </bean> <bean id="SysLogMapper" > <property name="mapperInterface" value="dao.ISysLogDao"/> <property name="sqlSessionFactory" ref="factory"/> </bean>

2.5Spring 整合 SpringMVC

如果没配置,我们的 Spring 容器是没有被创建的,通过监听 servletContext 对象,创建 Spring 容器

在 web.xml 中配置

```xml Archetype Created Web Application

org.springframework.web.context.ContextLoaderListener

contextConfigLocation classpath :applicationContext.xml,classpath :spring-security.xml

org.springframework.web.context.request.RequestContextListener ```

配置前端控制器

```xml

dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring-mvc.xml 1 dispatcherServlet / ```

其他

```xml

CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true CharacterEncodingFilter *.do ```

2.5 配置 Spring Security

同在 web.xml 文件中,配置

```xml

springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* ```

指定你要拦截路径,这里是全部,Spring Security 帮助我们完成用户的认证与授权操作

新建一个 XML 配置文件

```xml

<!--开启权限控制标签-->
<security:global-method-security jsr250-annotations="disabled" secured-annotations="disabled" pre-post-annotations="enabled"/>

<!-- 配置不拦截的资源 -->
<security:http pattern="/login.jsp" security="none"/>
<security:http pattern="/failer.jsp" security="none"/>
<security:http pattern="/css/**" security="none"/>
<security:http pattern="/img/**" security="none"/>
<security:http pattern="/plugins/**" security="none"/>

<!--
    配置具体的规则
    auto-config="true"  不用自己编写登录的页面,框架提供默认登录页面
    use-expressions="false" 是否使用SPEL表达式,不使用则无法使用security标签控制页面显示
-->
<security:http auto-config="true" use-expressions="true">
    <!-- 配置具体的拦截的规则 pattern="请求路径的规则" access="访问系统的人,必须有ROLE_USER的角色" -->
    <security:intercept-url pattern="/**" access="hasAnyAuthority('ROLE_USER','ROLE_ADMIN','ROLE_SUPER')"/>

    <!-- 定义跳转的具体的页面 -->
    <security:form-login
            login-page="/login.jsp"
            login-processing-url="/login.do"
            default-target-url="/index.jsp"
            authentication-failure-url="/failer.jsp"
            authentication-success-forward-url="/pages/main.jsp"
    />

    <!-- 关闭跨域请求 -->
    <security:csrf disabled    <!-- 注销按钮 退出 -->
    <security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.jsp" />

</security:http>


<!-- 切换成数据库中的用户名和密码 userService是实现spring service的规范实现类-->
<security:authentication-manager>
    <security:authentication-provider user-service-ref="userService">
        <!-- 配置加密的方式 -->
        <security:password-encoder ref="passwordEncoder"/>
    </security:authentication-provider>
</security:authentication-manager>

<!-- 配置加密类 -->
<bean id="passwordEncoder" class="Hf7_f4e6_e68ad3f org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

<!-- 提供了入门的方式,在内存中存入用户名和密码
<security:authentication-manager>
    <security:authentication-provider>
        <security:user-service>
            <security:user name="admin" password="{noop}admin" authorities="ROLE_USER"/>
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>
-->

```

3、模块功能实现

这个大家看具体的代码即可

这里看下 Controller 的情况,就可以知道大概的功能了。

UserController 包括用户的一些常规操作以及授权操作,比如那个角色的用户可以访问哪些模块,哪个角色的用户看不见哪些模块的页面

3.1 产品管理

产品、订单、游客、会员的表关系可以看这篇

https://blog.csdn.net/weixin_41154636/article/details/90680658

3.2 订单管理

3.3 用户管理

3.4 角色管理

3.5 资源权限管理

3.6 日志管理

利用 AOP 切面编程,将日志模块织入所有的 Controller 中

3.7 权限控制

如果以超级管理员(所有模块可访问)

是可以查看日志的

如果你只是普通的用户,是无法看见访问日志选项的

另外普通用户在访问某些模块时会提示权限不足

总结

SSM 层次思路还是比较清晰的,就是配置有点繁琐。

参考文献

  • 基于JSP的考试后台管理系统的设计与开发(曲阜师范大学·常洪光)
  • 基于JSP的考试后台管理系统的设计与开发(曲阜师范大学·常洪光)
  • XM公司后台服务管理平台的设计与实现(大连理工大学·王浩)
  • 基于REST的平台管理系统代理程序研究与设计(上海交通大学·郑家晔)
  • 基于.NET平台的积分商诚订单管理系统(大连理工大学·赵丹)
  • 基于协作开发平台的软件项目管理系统的设计与实现(华中科技大学·张文雅)
  • 基于web的现代物流信息管理系统的设计与实现(电子科技大学·高朋新)
  • 房地产公司物业管理系统的设计与实现(电子科技大学·宋景平)
  • 基于SSM框架的资产证券化系统的设计与实现(西安电子科技大学·贾田田)
  • 基于SOA的ERP分销管理平台的设计与实现(吉林大学·李舒毅)
  • 基于pyramid的社区网络后台管理系统设计与开发(北京邮电大学·韩亚平)
  • 基于协作开发平台的软件项目管理系统的设计与实现(华中科技大学·张文雅)
  • 基于SSH的物业管理平台的设计与实现(昆明理工大学·张成)
  • 基于.NET平台的积分商诚订单管理系统(大连理工大学·赵丹)
  • 现代综合性物流管理系统的设计与实现(电子科技大学·杜云飞)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码导航 ,原文地址:https://bishedaima.com/yuanma/35852.html

相关推荐

  • 基于安卓实现个人记账本应用源码

    这是一个🔥🔥基于安卓实现个人记账本应用源码🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 个人记账本开发技术栈为安卓项目,可以作为毕业设计课程设计作业使用android studio实现一个个人记账本安卓应用
    2024年05月23日
    2 1 1
  • 基于javaweb开发图书管理系统

    book-management-system javaweb,图书管理系统,软件设计与分析,期末大作业 前言 本项目是一个基于 javaWeb 的图书管理系统
    2024年05月14日
    4 1 1
  • 基于SSM框架的奖金管理系统源码

    这是一个🔥🔥基于SSM框架的奖金管理系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 奖金管理系统开发技术栈为SSM项目,可以作为毕业设计课程设计作业使用SSM框架(springmvc+spring+mybatis)实现一个用于企业的奖金管理系统
    2024年05月23日
    1 1 1
  • 基于Python设计的预测糖尿病

    基于Python设计的预测糖尿病 摘要和关键词 本次实验的主要内容是使用回归分析和聚类分析来预测某人患糖尿病的可能性和身体的糖尿病指数, 关键词:糖尿病;线性回归;聚类分析 使用说明 数据来源:UCI 机器学习库 http://archive
    2024年05月14日
    1 1 1
  • 基于Java+JSP+Servlet+Mysql的高校教师科研管理系统

    这是一个🔥🔥基于JSP的高校教师科研管理系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 高校教师科研管理开发技术栈为JSP项目,可以作为毕业设计课程设计作业基于Java+JSP+Servlet+Mysql技术实现的教师科研信息管理系统
    2024年05月23日
    15 1 5
  • 企业设备管理系统

    这是一个🔥🔥基于SpringBoot框架的企业设备管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于Python的四市天气数据爬取与可视化分析

    四市天气数据爬取与可视化分析 探索四个城市的天气状况!使用Python爬虫获取秦皇岛,济南,北京和深圳的天气数据,然后利用数据可视化技术展示这些城市的气候趋势
    2024年05月14日
    1 1 1
  • 基于SSM框架的电影院售票系统

    电影产业作为文化产业的重要组成部分,在数字化时代迎来了前所未有的发展机遇,随着互联网技术的普及和移动支付的便利,电影院售票系统的建设显得尤为重要,本论文旨在基于SSM框架构建一个高效
    2024年05月07日
    42 1 9
  • 基于SpringBoot框架的青年公寓服务平台

    这是一套采用🔥🔥SpringBoot为核心的青年公寓服务系统源代码,主要编程语言为Java,并结合了Vue技术进行开发,开发工具为Idea或Eclipse,此项目聚焦于青年公寓的租赁服务
    2024年05月23日
    5 1 2
  • 基于SpringBoot框架的基于多维分类的知识管理系统

    这是一套采用🔥🔥SpringBoot框架构建的多维度分类知识管理系统源代码,主要编程语言为Java,并结合了SpringBoot和Vue技术,开发工具包括Idea或Eclipse
    2024年05月23日
    8 1 3

发表回复

登录后才能评论