基于 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
<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="uf8_a8d8_d8f8ed2 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="y1f_2914_14d0841 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&characterEncoding=UTF-8&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="Ba6_76aa_aa23d33 org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
配置 MyBatis 的 Mapper,生成代理对象
2.5Spring 整合 SpringMVC
如果没配置,我们的 Spring 容器是没有被创建的,通过监听 servletContext 对象,创建 Spring 容器
在 web.xml 中配置
```xml
配置前端控制器
```xml
其他
```xml
2.5 配置 Spring Security
同在 web.xml 文件中,配置
```xml
指定你要拦截路径,这里是全部,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="J85_a30a_0af9a13 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://m.bishedaima.com/yuanma/35852.html