当前位置:   article > 正文

(简易SSM框架搭建)物流查询系统_ssm框架实现物流网站

ssm框架实现物流网站

ssm框架原理是:将Spring、SpringMVC、MyBatis整合在一起,作为数据源较简单的web项目的框架。 它有效规避servlet的繁杂加载驱动等一系列程序,选用MyBatis进行与数据库的连接。

目录

首先:新建工程Maven。

2.在pom.xml文件中进行引用和下载,(导包的过程) 

 3.Mybatis的配置文件db.properties 和log4j.properties(日志)

 4.user类的创建(关联的表都创建相关类)

 5.userMapper.xml文件配置

(主要操作,如果字段名错误,就不能连接到数据库)

 6.配置其他xml文件:

7、数据库

​编辑 ​编辑

8. userMapper

 9.service:接口和实现类

 10.前端界面:

 11.controller

 12.关于加密:MD5

 13.关于分页部分:


  1. 首先:新建工程Maven。

2.在pom.xml文件中进行引用和下载,(导包的过程) 

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.hqyj.poison</groupId>
  6. <artifactId>ssm</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>ssm Maven Webapp</name>
  10. <!-- FIXME change it to the project's website -->
  11. <url>http://www.example.com</url>
  12. <properties>
  13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14. <maven.compiler.source>1.7</maven.compiler.source>
  15. <maven.compiler.target>1.7</maven.compiler.target>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>junit</groupId>
  20. <artifactId>junit</artifactId>
  21. <version>4.11</version>
  22. <scope>test</scope>
  23. </dependency>
  24. <!--spring -->
  25. <dependency>
  26. <groupId>org.springframework</groupId>
  27. <artifactId>spring-context</artifactId>
  28. <version>4.3.13.RELEASE</version>
  29. </dependency>
  30. <!--事务-->
  31. <dependency>
  32. <groupId>org.springframework</groupId>
  33. <artifactId>spring-tx</artifactId>
  34. <version>4.3.13.RELEASE</version>
  35. </dependency>
  36. <!--spring jdbc-->
  37. <dependency>
  38. <groupId>org.springframework</groupId>
  39. <artifactId>spring-jdbc</artifactId>
  40. <version>4.3.13.RELEASE</version>
  41. </dependency>
  42. <!--配置webmvc -->
  43. <dependency>
  44. <groupId>org.springframework</groupId>
  45. <artifactId>spring-webmvc</artifactId>
  46. <version>4.3.13.RELEASE</version>
  47. </dependency>
  48. <!--配置切面的jar包 -->
  49. <dependency>
  50. <groupId>org.springframework</groupId>
  51. <artifactId>spring-aspects</artifactId>
  52. <version>4.3.13.RELEASE</version>
  53. </dependency>
  54. <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
  55. <dependency>
  56. <groupId>aopalliance</groupId>
  57. <artifactId>aopalliance</artifactId>
  58. <version>1.0</version>
  59. </dependency>
  60. <!--mybatis,用来加载SqlSessionFactoryBean和MapperScannerConfigurer -->
  61. <dependency>
  62. <groupId>org.mybatis</groupId>
  63. <artifactId>mybatis</artifactId>
  64. <version>3.5.0</version>
  65. </dependency>
  66. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
  67. <!--spring整合mybatis的依赖包-->
  68. <dependency>
  69. <groupId>org.mybatis</groupId>
  70. <artifactId>mybatis-spring</artifactId>
  71. <version>1.3.2</version>
  72. </dependency>
  73. <!-- mybatis分页需要的jar -->
  74. <dependency>
  75. <groupId>com.github.pagehelper</groupId>
  76. <artifactId>pagehelper</artifactId>
  77. <version>5.1.2</version>
  78. </dependency>
  79. <!-- 连接池,用来加载DruidDataSource-->
  80. <dependency>
  81. <groupId>com.alibaba</groupId>
  82. <artifactId>druid</artifactId>
  83. <version>1.0.9</version>
  84. </dependency>
  85. <!--json处理工具包 -->
  86. <dependency>
  87. <groupId>com.fasterxml.jackson.core</groupId>
  88. <artifactId>jackson-databind</artifactId>
  89. <version>2.9.0</version>
  90. </dependency>
  91. <!--日志文件 -->
  92. <dependency>
  93. <groupId>org.slf4j</groupId>
  94. <artifactId>slf4j-log4j12</artifactId>
  95. <version>1.7.22</version>
  96. </dependency>
  97. <!--servlet相关jar-->
  98. <dependency>
  99. <groupId>javax.servlet</groupId>
  100. <artifactId>servlet-api</artifactId>
  101. <version>2.5</version>
  102. </dependency>
  103. <dependency>
  104. <groupId>javax.servlet</groupId>
  105. <artifactId>jsp-api</artifactId>
  106. <version>2.0</version>
  107. </dependency>
  108. <dependency>
  109. <groupId>mysql</groupId>
  110. <artifactId>mysql-connector-java</artifactId>
  111. <version>5.1.38</version>
  112. </dependency>
  113. <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-all -->
  114. <dependency>
  115. <groupId>org.apache.shiro</groupId>
  116. <artifactId>shiro-all</artifactId>
  117. <version>1.3.2</version>
  118. </dependency>
  119. <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
  120. <dependency>
  121. <groupId>org.projectlombok</groupId>
  122. <artifactId>lombok</artifactId>
  123. <version>1.18.12</version>
  124. <scope>provided</scope>
  125. </dependency>
  126. </dependencies>
  127. <build>
  128. <finalName>ssm</finalName>
  129. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  130. <plugins>
  131. <plugin>
  132. <artifactId>maven-clean-plugin</artifactId>
  133. <version>3.1.0</version>
  134. </plugin>
  135. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  136. <plugin>
  137. <artifactId>maven-resources-plugin</artifactId>
  138. <version>3.0.2</version>
  139. </plugin>
  140. <plugin>
  141. <artifactId>maven-compiler-plugin</artifactId>
  142. <version>3.8.0</version>
  143. </plugin>
  144. <plugin>
  145. <artifactId>maven-surefire-plugin</artifactId>
  146. <version>2.22.1</version>
  147. </plugin>
  148. <plugin>
  149. <artifactId>maven-war-plugin</artifactId>
  150. <version>3.2.2</version>
  151. </plugin>
  152. <plugin>
  153. <artifactId>maven-install-plugin</artifactId>
  154. <version>2.5.2</version>
  155. </plugin>
  156. <plugin>
  157. <artifactId>maven-deploy-plugin</artifactId>
  158. <version>2.8.2</version>
  159. </plugin>
  160. </plugins>
  161. </pluginManagement>
  162. </build>
  163. </project>

 3.Mybatis的配置文件db.properties 和log4j.properties(日志)

  1. jdbc.driverClassName=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8
  3. jdbc.username=root
  4. jdbc.password=123456
  5. maxActive:20
  6. initialSize:1
  7. maxWait:60000
  8. minIdle:10
  1. log4j.rootLogger=DEBUG, Console
  2. #Console
  3. log4j.appender.Console=org.apache.log4j.ConsoleAppender
  4. log4j.appender.Console.layout=org.apache.log4j.PatternLayout
  5. log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
  6. log4j.logger.java.sql.ResultSet=INFO
  7. log4j.logger.org.apache=INFO
  8. log4j.logger.java.sql.Connection=DEBUG
  9. log4j.logger.java.sql.Statement=DEBUG
  10. log4j.logger.java.sql.PreparedStatement=DEBUG

 4.user类的创建(关联的表都创建相关类)

@Data注解可以省略get、set方法,但是使用需要下载lombok插件。

关于@JsonFormat注解,跳转连接如下:jackSon中@JsonFormat注解使用详解_灬叛逆丿文的博客-CSDN博客_jsonformat注解原理

  1. package com.hqyj.poison.entity;
  2. import com.fasterxml.jackson.annotation.JsonFormat;
  3. import lombok.Data;
  4. import org.springframework.format.annotation.DateTimeFormat;
  5. import java.util.Date;
  6. import java.util.List;
  7. @Data
  8. public class User {
  9. private Integer userId;
  10. private String userName;
  11. private String userPwd;
  12. private String userSex;
  13. private Integer userAge;
  14. private String userTel;
  15. @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
  16. @DateTimeFormat(pattern = "yyyy-MM-dd")
  17. private Date userBirthday;
  18. private String userEmail;
  19. private List<Role> roleList;
  20. }

 5.userMapper.xml文件配置

(主要操作,如果字段名错误,就不能连接到数据库)

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--以当前mapper接口的完全限定名作为命名空间-->
  6. <mapper namespace="com.hqyj.poison.mapper.UserMapper">
  7. <resultMap id="userMap" type="User">
  8. <!--colum是数据库的字段名;property是java类中的属性名。-->
  9. <id column="user_id" property="userId"></id>
  10. <result column="user_name" property="userName"></result>
  11. <result column="user_tel" property="userTel"></result>
  12. <result column="user_age" property="userAge"></result>
  13. <result column="user_sex" property="userSex"></result>
  14. <result column="user_password" property="userPwd"></result>
  15. <result column="user_email" property="userEmail"></result>
  16. <result column="user_birthday" property="userBirthday"></result>
  17. </resultMap>
  18. <resultMap id="userMap1" type="User">
  19. <id column="id" property="userId"></id>
  20. <result column="user_name" property="userName"></result>
  21. <result column="user_tel" property="userTel"></result>
  22. <result column="user_age" property="userAge"></result>
  23. <result column="user_sex" property="userSex"></result>
  24. <result column="user_password" property="userPwd"></result>
  25. <result column="user_email" property="userEmail"></result>
  26. <result column="user_birthday" property="userBirthday"></result>
  27. <collection property="roleList" ofType="Role">
  28. <id column="role_id" property="roleId"></id>
  29. <result column="role_name" property="roleName"></result>
  30. </collection>
  31. </resultMap>
  32. <resultMap id="orderMap" type="Order">
  33. <id column="order_id" property="orderId"></id>
  34. <result column="order_no" property="orderNo"></result>
  35. <result column="order_people" property="orderPeople"></result>
  36. <result column="order_freight" property="orderFreight"></result>
  37. <result column="order_tel" property="orderTel"></result>
  38. <result column="give_method" property="giveMethod"></result>
  39. <result column="order_time" property="orderTime"></result>
  40. </resultMap>
  41. <!-- 订单表-->
  42. <!-- 查询订单id与方法名相一致-->
  43. <select id="selectOrderByQueryBean" resultMap="orderMap">
  44. select * from orders
  45. <where>
  46. <if test="orderTel!=null and orderTel!=''"> and order_tel =#{orderTel} </if>
  47. </where>
  48. limit #{startIndex},#{pageSize}
  49. </select>
  50. <!--订单总数-->
  51. <select id="selectCountToOrder" resultType="int">
  52. select count(*) from orders
  53. <where>
  54. <if test="orderTel!=null and orderTel!=''"> and order_tel =#{orderTel} </if>
  55. </where>
  56. </select>
  57. <!--删除订单-->
  58. <delete id="deleteOrderById"> delete from orders where order_id = #{orderId} </delete>
  59. <!-- 修改订单-->
  60. <update id="updateOrder"> update orders set
  61. order_people = #{orderPeople}, order_freight = #{orderFreight}, order_tel = #{orderTel},
  62. give_method = #{giveMethod}, order_time = #{orderTime}
  63. where order_id = #{orderId}
  64. </update>
  65. <!-- 按编号查询-->
  66. <select id="selectOrderByNo" resultMap="orderMap">
  67. select * from orders where order_no = #{orderNo}
  68. </select>
  69. <!--增加订单-->
  70. <insert id="insertOrder">
  71. insert into orders
  72. <trim prefix="(" suffix=")" suffixOverrides=",">
  73. <if test="orderPeople!=null and orderPeople!=''">
  74. order_people,
  75. </if>
  76. <if test="orderNo!=null and orderNo!=''">
  77. order_no,
  78. </if>
  79. <if test="orderFreight!=null and orderFreight!=''">
  80. order_freight,
  81. </if>
  82. <if test="orderTel!=null and orderTel!=''">
  83. order_tel,
  84. </if>
  85. <if test="giveMethod!=null and giveMethod!=''">
  86. give_method,
  87. </if>
  88. <if test="orderTime!=null">
  89. order_time,
  90. </if>
  91. </trim>
  92. values
  93. <trim prefix="(" suffix=")" suffixOverrides=",">
  94. <if test="orderPeople!=null and orderPeople!=''">
  95. #{orderPeople},
  96. </if>
  97. <if test="orderNo!=null and orderNo!=''">
  98. #{orderNo},
  99. </if>
  100. <if test="orderFreight!=null and orderFreight!=''">
  101. #{orderFreight},
  102. </if>
  103. <if test="orderTel!=null and orderTel!=''">
  104. #{orderTel},
  105. </if>
  106. <if test="giveMethod!=null and giveMethod!=''">
  107. #{giveMethod},
  108. </if>
  109. <if test="orderTime!=null">
  110. #{orderTime},
  111. </if>
  112. </trim>
  113. </insert>
  114. <!-- 用户表-->
  115. <select id="selectUser" resultMap="userMap"> select * from user where user_name=#{userName} </select>
  116. <!-- 查询权限-->
  117. <select id="selectUserAndRole" resultMap="userMap1"> SELECT*FROM user u,user_role m, role r where u.user_id = m.user_id and m.role_id = r.role_id and u.user_name = #{userName} </select>
  118. <!-- 查询用户-->
  119. <select id="selectUserByQueryBean" resultMap="userMap">
  120. select * from user
  121. <where>
  122. <if test="userName!=null and userName!=''"> and user_name like concat(#{userName},"%") </if>
  123. <if test="userTel!=null and userTel!=''"> and user_tel like concat(#{userTel},"%") </if>
  124. </where>
  125. limit #{startIndex},#{pageSize}
  126. </select>
  127. <!-- 查询账号密码是否一致-->
  128. <select id="queryUsersByIdAndPwd" resultMap="userMap">
  129. select * from user where user_name = #{userName} and user_password = #{userPwd}
  130. </select>
  131. <!-- 修改密码-->
  132. <update id="updateUserPwdByName">
  133. update user set user_password = #{userPwd} where user_name = #{userName}
  134. </update>
  135. <!-- 统计用户数量-->
  136. <select id="selectCount" resultType="int">
  137. select count(*) from user
  138. <where>
  139. <if test="userName!=null and userName!=''"> and user_name like concat(#{userName},"%") </if>
  140. <if test="userTel!=null and userTel!=''"> and user_tel like concat(#{userTel},"%") </if>
  141. </where>
  142. </select>
  143. <!-- 删除用户-->
  144. <delete id="deleteUserById"> delete from user where user_id = #{userId} </delete>
  145. <!-- 修改用户-->
  146. <update id="updateUser"> update user set user_name = #{userName}, user_sex = #{userSex}, user_tel = #{userTel}, user_age = #{userAge}, user_birthday = #{userBirthday}, user_email = #{userEmail} where user_id = #{userId} </update>
  147. <!-- 注册-->
  148. <insert id="registered">
  149. insert into user
  150. <trim prefix="(" suffix=")" suffixOverrides=",">
  151. <if test="userName!=null and userName!=''">
  152. user_name,
  153. </if>
  154. <if test="userPwd!=null and userPwd!=''">
  155. user_password,
  156. </if>
  157. <if test="userTel!=null and userTel!=''">
  158. user_tel,
  159. </if>
  160. <if test="userAge!=null and userAge!=''">
  161. user_age,
  162. </if>
  163. <if test="userSex!=null and userSex!=''">
  164. user_sex,
  165. </if>
  166. <if test="userBirthday!=null">
  167. user_birthday,
  168. </if>
  169. <if test="userEmail!=null and userEmail!=''">
  170. user_email,
  171. </if>
  172. </trim>
  173. values
  174. <trim prefix="(" suffix=")" suffixOverrides=",">
  175. <if test="userName!=null and userName!=''">
  176. #{userName},
  177. </if>
  178. <if test="userPwd!=null and userPwd!=''">
  179. #{userPwd},
  180. </if>
  181. <if test="userTel!=null and userTel!=''">
  182. #{userTel},
  183. </if>
  184. <if test="userAge!=null and userAge!=''">
  185. #{userAge},
  186. </if>
  187. <if test="userSex!=null and userSex!=''">
  188. #{userSex},
  189. </if>
  190. <if test="userBirthday!=null">
  191. #{userBirthday},
  192. </if>
  193. <if test="userEmail!=null and userEmail!=''">
  194. #{userEmail},
  195. </if>
  196. </trim>
  197. </insert>
  198. </mapper>

 6.配置其他xml文件:

applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context.xsd
  11. http://www.springframework.org/schema/aop
  12. http://www.springframework.org/schema/aop/spring-aop.xsd
  13. ">
  14. <!--开启注解扫描-->
  15. <context:component-scan base-package="com.hqyj.poison.*"/>
  16. <!--读取properties文件-->
  17. <context:property-placeholder location="classpath:properties/*.properties"/>
  18. <!-- 配置druid数据源 -->
  19. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  20. <property name="driverClassName" value="${jdbc.driverClassName}" />
  21. <property name="url" value="${jdbc.url}" />
  22. <property name="username" value="${jdbc.username}" />
  23. <property name="password" value="${jdbc.password}" />
  24. <!-- 最大并发连接数 -->
  25. <property name="maxActive" value="${maxActive}" />
  26. <!-- 初始化连接数量 -->
  27. <property name="initialSize" value="${initialSize}" />
  28. <!-- 最小空闲连接数 -->
  29. <property name="minIdle" value="${minIdle}" />
  30. <!-- 配置获取连接等待超时的时间 -->
  31. <property name="maxWait" value="${maxWait}" />
  32. </bean>
  33. <import resource="springMybatis.xml"></import>
  34. <import resource="springTransaction.xml"></import>
  35. <import resource="springShiro.xml"></import>
  36. </beans>

 springmvc.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd
  12. http://www.springframework.org/schema/aop
  13. http://www.springframework.org/schema/aop/spring-aop.xsd
  14. http://www.springframework.org/schema/mvc
  15. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  16. <!--开启包扫描-->
  17. <context:component-scan base-package="com.hqyj.poison.*"></context:component-scan>
  18. <!--开启mvc的注解驱动-->
  19. <mvc:annotation-driven></mvc:annotation-driven>
  20. <!--静态资源放行-->
  21. <mvc:resources mapping="/static/**" location="/static/"></mvc:resources>
  22. <!--配置mvc的视图解析器-->
  23. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  24. <property name="prefix" value="../view/"></property>
  25. <property name="suffix" value=".jsp"></property>
  26. </bean>
  27. <!-- 开启shiro注解支持 -->
  28. <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
  29. <property name="securityManager" ref="securityManager" />
  30. </bean>
  31. <!-- 开启aop,对类代理 -->
  32. <aop:config proxy-target-class="true"/>
  33. </beans>

springMybatis.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context.xsd
  11. http://www.springframework.org/schema/aop
  12. http://www.springframework.org/schema/aop/spring-aop.xsd
  13. ">
  14. <!--配置sqlsessionFactory-->
  15. <bean class="org.mybatis.spring.SqlSessionFactoryBean">
  16. <!-- 数据源 -->
  17. <property name="dataSource" ref="dataSource"></property>
  18. <!--配置映射文件的路径-->
  19. <property name="mapperLocations" value="classpath:mapper/*.xml"/>
  20. <!--配置别名-->
  21. <property name="typeAliasesPackage" value="com.hqyj.poison.entity"></property>
  22. </bean>
  23. <!--
  24. 接口开发,扫描 com.hqyj.poison.dao包 ,写在此包下的接口即可被扫描到
  25. 通过sqlsessionFactory得到sqlSession
  26. sqlSession.getMapper(UserMapper.class);(帮我们做了,不用再单独配置)
  27. -->
  28. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  29. <property name="basePackage" value="com.hqyj.poison.mapper"/>
  30. </bean>
  31. </beans>

 springShiro.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-4.3.xsd
  9. http://www.springframework.org/schema/aop
  10. http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  11. http://www.springframework.org/schema/tx
  12. http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  13. <!-- shiro相关配置 -->
  14. <!-- 配置自定义数据源myRealm -->
  15. <bean id="myRealm" class="com.hqyj.poison.realm.MyRealm">
  16. <!-- &lt;!&ndash; 注入凭证匹配 &ndash;&gt;-->
  17. <property name="credentialsMatcher" ref="credentialsMatcher"></property>
  18. </bean>
  19. <!-- 凭证匹配器 -->
  20. <bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
  21. <property name="hashAlgorithmName" value="md5" />
  22. <property name="hashIterations" value="1024" />
  23. </bean>
  24. <!-- 配置安全管理器 -->
  25. <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
  26. <property name="realm" ref="myRealm"></property>
  27. </bean>
  28. <!-- 配置authc,默认表单的用户名和密码必须是:username,password -->
  29. <!-- <bean id="authc" class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">-->
  30. <!-- <property name="usernameParam" value="userName"></property>-->
  31. <!-- <property name="passwordParam" value="userPassword"></property>-->
  32. <!-- </bean>-->
  33. <!-- 配置shiro过滤器 -->
  34. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  35. <property name="securityManager" ref="securityManager" />
  36. <!-- loginUrl认证提交地址,如果没有认证将会请求此地址进行认证,请求此地址将由formAuthenticationFilter进行表单认证 -->
  37. <property name="loginUrl" value="/sys/gologin" />
  38. <property name="successUrl" value="/sys/index"></property>
  39. <!-- 授权不通过(不具备相应权限) 走该地址-->
  40. <property name="unauthorizedUrl" value="/sys/error"></property>
  41. <!-- 过虑器链定义,从上向下顺序执行,一般将/**放在最下边 anon表示放行-->
  42. <property name="filterChainDefinitions">
  43. <value>
  44. /new=anon
  45. /sys/login=anon
  46. /sys/gologin=anon
  47. /sys/error=anon
  48. /sys/register=anon
  49. /sys/goregister=anon
  50. /sys/loginOut=logout
  51. /static/**=anon
  52. <!-- user表示身份认证通过或通过记住我认证通过的可以访问 -->
  53. <!-- /**=user-->
  54. <!-- 所有请求都要认证 -->
  55. /**=authc
  56. </value>
  57. </property>
  58. </bean>
  59. </beans>

springTransaction.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/aop
  9. http://www.springframework.org/schema/aop/spring-aop.xsd
  10. http://www.springframework.org/schema/tx
  11. http://www.springframework.org/schema/tx/spring-tx.xsd">
  12. <!-- 配置事务管理器 -->
  13. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  14. <!-- 注入数据源 -->
  15. <property name="dataSource" ref="dataSource"></property>
  16. </bean>
  17. <!-- 配置通知 -->
  18. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  19. <tx:attributes>
  20. <!-- 传播行为 -->
  21. <tx:method name="add*" propagation="REQUIRED" />
  22. <tx:method name="update*" propagation="REQUIRED"/>
  23. <tx:method name="remove*" propagation="REQUIRED"/>
  24. <tx:method name="query*" propagation="SUPPORTS" read-only="true"/>
  25. </tx:attributes>
  26. </tx:advice>
  27. <aop:config>
  28. <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.hqyj.poison.service.*.*(..))"/>
  29. </aop:config>
  30. <!--在 Spring容器中注册事务注解驱动-->
  31. <!-- <tx:annotation-driven transaction-manager="transactionManager" />-->
  32. </beans>

7、数据库

 

 

8. userMapper

每个方法对应到service中:

  1. package com.hqyj.poison.mapper;
  2. import com.hqyj.poison.entity.Order;
  3. import com.hqyj.poison.entity.Pwd;
  4. import com.hqyj.poison.entity.User;
  5. import com.hqyj.poison.query.QueryOrderBean;
  6. import com.hqyj.poison.query.QueryUserBean;
  7. import com.hqyj.poison.result.ResultInfo;
  8. import org.aspectj.weaver.ast.Or;
  9. import java.util.List;
  10. public interface UserMapper {
  11. User selectUser(String userName);
  12. User selectUserAndRole(String userName);
  13. User queryUsersByIdAndPwd(Pwd pwd);
  14. void registered(User user);
  15. List<User> selectUserByQueryBean(QueryUserBean queryUserBean);
  16. Integer selectCount(QueryUserBean queryUserBean);
  17. void updateUserPwdByName(Pwd pwd);
  18. void deleteUserById(Integer userId);
  19. void updateUser(User user);
  20. List<Order> selectOrderByQueryBean(QueryOrderBean queryOrderBean);
  21. Integer selectCountToOrder(QueryOrderBean queryOrderBean);
  22. void deleteOrderById(Integer orderId);
  23. void updateOrder(Order order);
  24. void insertOrder(Order order);
  25. Order selectOrderByNo(String orderNo);
  26. }

 9.service:接口和实现类

 

接口:

  1. package com.hqyj.poison.service;
  2. import com.hqyj.poison.entity.Order;
  3. import com.hqyj.poison.entity.Pwd;
  4. import com.hqyj.poison.entity.User;
  5. import com.hqyj.poison.query.QueryOrderBean;
  6. import com.hqyj.poison.query.QueryUserBean;
  7. import com.hqyj.poison.result.ResultInfo;
  8. public interface UserService {
  9. ResultInfo login(String userName, String userPwd);
  10. User queryUser(String userName);
  11. ResultInfo newUser(User user);
  12. User queryUserAndRole(String userName);
  13. ResultInfo selectUsers(QueryUserBean queryUserBean);
  14. User queryUsersByIdAndPwd(Pwd pwd);
  15. ResultInfo updateUserPwdByName(Pwd pwd);
  16. ResultInfo deleteUserById(Integer userId);
  17. ResultInfo updateUserById(User user);
  18. // 订单表
  19. ResultInfo selectOrders(QueryOrderBean queryOrderBean);
  20. ResultInfo deleteOrderById(Integer orderId);
  21. ResultInfo updateOrderById(Order order);
  22. ResultInfo insertOrder(Order order);
  23. Order queryOrders(String orderNo);
  24. }

 实现类:

  1. package com.hqyj.poison.service.impl;
  2. import com.hqyj.poison.entity.Order;
  3. import com.hqyj.poison.entity.Pwd;
  4. import com.hqyj.poison.entity.User;
  5. import com.hqyj.poison.mapper.UserMapper;
  6. import com.hqyj.poison.query.QueryOrderBean;
  7. import com.hqyj.poison.query.QueryUserBean;
  8. import com.hqyj.poison.result.ResultInfo;
  9. import com.hqyj.poison.service.UserService;
  10. import org.apache.shiro.SecurityUtils;
  11. import org.apache.shiro.authc.UsernamePasswordToken;
  12. import org.apache.shiro.subject.Subject;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import java.util.List;
  16. @Service
  17. public class UserServiceImpl implements UserService {
  18. @Autowired
  19. private UserMapper userMapper;
  20. @Override
  21. public User queryUser(String userName) {
  22. return userMapper.selectUser(userName);
  23. }
  24. @Override
  25. public User queryUserAndRole(String userName) {
  26. return userMapper.selectUserAndRole(userName);
  27. }
  28. @Override
  29. public ResultInfo newUser(User user) {
  30. userMapper.registered(user);
  31. if (user!=null){
  32. return new ResultInfo("200","success");
  33. }return new ResultInfo("500","error");
  34. }
  35. @Override
  36. public ResultInfo login(String userName, String userPwd) {
  37. // 获取subject对象
  38. Subject subject = SecurityUtils.getSubject();
  39. // 将controller(页面)传递过来的userName和userPwd放入token令牌中
  40. UsernamePasswordToken token = new UsernamePasswordToken(userName,userPwd);
  41. try {
  42. // 登录认证
  43. subject.login(token);
  44. // 授权
  45. subject.checkRoles();
  46. return new ResultInfo("200","success");
  47. } catch (Exception e) {
  48. User user = (User) SecurityUtils.getSubject().getSession().getAttribute("u");
  49. if(user==null){
  50. return new ResultInfo("500","账号不存在!");
  51. }
  52. return new ResultInfo("500","密码错误!");
  53. }
  54. }
  55. @Override
  56. public ResultInfo selectUsers(QueryUserBean queryUserBean) {
  57. List<User> users = userMapper.selectUserByQueryBean(queryUserBean);
  58. Integer totals = userMapper.selectCount(queryUserBean);
  59. return new ResultInfo("success",totals,users);
  60. }
  61. @Override
  62. public User queryUsersByIdAndPwd(Pwd pwd) {
  63. return userMapper.queryUsersByIdAndPwd(pwd);
  64. }
  65. @Override
  66. public ResultInfo updateUserPwdByName(Pwd pwd) {
  67. userMapper.updateUserPwdByName(pwd);
  68. return new ResultInfo("200","success");
  69. }
  70. @Override
  71. public ResultInfo deleteUserById(Integer userId) {
  72. userMapper.deleteUserById(userId);
  73. return new ResultInfo("200","删除成功");
  74. }
  75. @Override
  76. public ResultInfo updateUserById(User user) {
  77. userMapper.updateUser(user);
  78. return new ResultInfo("200","success");
  79. }
  80. @Override
  81. public ResultInfo selectOrders(QueryOrderBean queryOrderBean) {
  82. List<Order> orders = userMapper.selectOrderByQueryBean(queryOrderBean);
  83. Integer totals = userMapper.selectCountToOrder(queryOrderBean);
  84. return new ResultInfo("success",totals,orders);
  85. }
  86. @Override
  87. public ResultInfo deleteOrderById(Integer orderId) {
  88. userMapper.deleteOrderById(orderId);
  89. return new ResultInfo("200","删除成功");
  90. }
  91. @Override
  92. public ResultInfo updateOrderById(Order order) {
  93. userMapper.updateOrder(order);
  94. return new ResultInfo("200","success");
  95. }
  96. @Override
  97. public ResultInfo insertOrder(Order order) {
  98. userMapper.insertOrder(order);
  99. return new ResultInfo("200","success");
  100. }
  101. @Override
  102. public Order queryOrders(String orderNo) {
  103. return userMapper.selectOrderByNo(orderNo);
  104. }
  105. }

 10.前端界面:

login.jsp登录展示页面:

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 86139
  4. Date: 2022/7/29
  5. Time: 10:09
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>登录</title>
  12. <!-- Google Font: Source Sans Pro -->
  13. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
  14. <link rel="stylesheet" href="../static/plugins/fontawesome-free/css/all.min.css">
  15. <link rel="stylesheet" href="../static/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
  16. <link rel="stylesheet" href="../static/dist/css/adminlte.min.css">
  17. </head>
  18. <body class="hold-transition login-page">
  19. <div class="login-box">
  20. <!-- /.login-logo -->
  21. <div class="card">
  22. <div class="card-body login-card-body">
  23. <p class="login-box-msg">登录</p>
  24. <form>
  25. <div class="input-group mb-3">
  26. <input id="username" type="text" class="form-control" placeholder="用户名">
  27. <div class="input-group-append">
  28. <div class="input-group-text">
  29. <span class="fas fa-user-circle"></span>
  30. </div>
  31. </div>
  32. </div>
  33. <div class="input-group mb-3">
  34. <input id="userpwd" type="password" class="form-control" placeholder="密码">
  35. <div class="input-group-append">
  36. <div class="input-group-text">
  37. <span class="fas fa-lock"></span>
  38. </div>
  39. </div>
  40. </div>
  41. <div class="input-group mb-3">
  42. <span id="mess" style="color: red"></span>
  43. </div>
  44. <div class="row">
  45. <div class="col-8">
  46. <div class="icheck-primary">
  47. <input type="checkbox" id="remember">
  48. <label for="remember">
  49. Remember Me
  50. </label>
  51. </div>
  52. </div>
  53. <!-- /.col -->
  54. <div class="col-4">
  55. <button type="button" onclick="login()" class="btn btn-primary btn-block">登录</button>
  56. </div>
  57. <!-- /.col -->
  58. </div>
  59. </form>
  60. <!-- /.social-auth-links -->
  61. <button type="button" data-toggle='modal' data-target='#newUser' class="btn btn-primary">注册</button>
  62. <!-- /.login->card-body -->
  63. <div class="modal fade" id="newUser" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  64. <div class="modal-dialog" role="document">
  65. <div class="modal-content">
  66. <div class="modal-header">
  67. <h4 class="modal-title" id="myModalLabel">用户新增</h4>
  68. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  69. </div>
  70. <div class="modal-body">
  71. <form class="form-horizontal">
  72. <div class="form-group">
  73. <label for="userName2" class="col-sm-2 control-label">用户名</label>
  74. <div class="col-sm-10">
  75. <input type="text" class="form-control" id="userName2" placeholder="用户名">
  76. </div>
  77. </div>
  78. <div class="form-group">
  79. <label for="userPwd1" class="col-sm-2 control-label">密码</label>
  80. <div class="col-sm-10">
  81. <input type="password" class="form-control" id="userPwd1" placeholder="密码">
  82. </div>
  83. </div>
  84. <div class="form-group">
  85. <label for="userAge2" class="col-sm-2 control-label">年龄</label>
  86. <div class="col-sm-10">
  87. <input type="number" class="form-control" id="userAge2" placeholder="年龄">
  88. </div>
  89. </div>
  90. <div class="form-group">
  91. <label class="col-sm-2 control-label">性别</label>
  92. <div class="col-sm-10">
  93. <label class="radio-inline">
  94. <input type="radio" name="gender" id="sex1" value="男" >
  95. </label>
  96. <label class="radio-inline">
  97. <input type="radio" name="gender" id="sex2" value="女">
  98. </label>
  99. </div>
  100. </div>
  101. <div class="form-group">
  102. <label for="userTel2" class="col-sm-2 control-label">电话</label>
  103. <div class="col-sm-10">
  104. <input type="text" class="form-control" id="userTel2" placeholder="电话">
  105. </div>
  106. </div>
  107. <div class="form-group">
  108. <label for="userBirthday2" class="col-sm-2 control-label">日期</label>
  109. <div class="col-sm-10">
  110. <input type="date" class="form-control" id="userBirthday2" placeholder="日期">
  111. </div>
  112. </div>
  113. <div class="form-group">
  114. <label for="userEmail2" class="col-sm-2 control-label">邮箱</label>
  115. <div class="col-sm-10">
  116. <input type="email" class="form-control" id="userEmail2" placeholder="邮箱">
  117. </div>
  118. </div>
  119. </form>
  120. </div>
  121. <div class="modal-footer">
  122. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
  123. <button type="button" onclick="newUser()" class="btn btn-primary">确认</button>
  124. </div>
  125. </div>
  126. </div>
  127. </div>
  128. <div class="modal fade" id="findpwd" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  129. <div class="modal-dialog" role="document">
  130. <div class="modal-content">
  131. <div class="modal-header">
  132. <h4 class="modal-title" id="myModalLabe2">信息验证</h4>
  133. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  134. </div>
  135. <div class="modal-body">
  136. <form class="form-horizontal">
  137. <div class="form-group">
  138. <label for="userName3" class="col-sm-2 control-label">用户名</label>
  139. <div class="col-sm-10">
  140. <input type="text" class="form-control" id="userName3" placeholder="用户名">
  141. </div>
  142. </div>
  143. <div class="form-group">
  144. <label for="userTel3" class="col-sm-2 control-label">电话</label>
  145. <div class="col-sm-10">
  146. <input type="text" class="form-control" id="userTel3" placeholder="电话">
  147. </div>
  148. </div>
  149. <div class="form-group">
  150. <label for="userEmail3" class="col-sm-2 control-label">邮箱</label>
  151. <div class="col-sm-10">
  152. <input type="email" class="form-control" id="userEmail3" placeholder="邮箱">
  153. </div>
  154. </div>
  155. </form>
  156. </div>
  157. <div class="modal-footer">
  158. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. <!-- /.login-box -->
  167. <script src="../static/plugins/jquery/jquery.min.js"></script>
  168. <script src="../static/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
  169. <script src="../static/dist/js/adminlte.min.js"></script>
  170. <script>
  171. function login() {
  172. var username = $("#username").val();
  173. var userpwd = $("#userpwd").val();
  174. $.ajax({
  175. url:"../sys/login",
  176. type:"POST",
  177. dataType:"json",
  178. data:{"userName":username,"userPwd":userpwd},
  179. success:function (data) {
  180. if(data.status=="500"){
  181. $("#mess").html(data.message);
  182. }else {
  183. window.location.href="../view/index.jsp";
  184. }
  185. },
  186. error:function (e) {
  187. alert("服务器出错!")
  188. }
  189. });
  190. }
  191. function newUser() {
  192. //获取编辑模态框中的表单元素的值
  193. var username = $("#userName2").val();
  194. var userpwd = $("#userPwd1").val();
  195. var useremail = $("#userEmail2").val();
  196. var userage = $("#userAge2").val();
  197. var userbirthday = $("#userBirthday2").val();
  198. var usertel = $("#userTel2").val();
  199. var usersex = $("input[type='radio']:checked").val();
  200. var user = {
  201. "userName":username,
  202. "userPwd":userpwd,
  203. "userEmail":useremail,
  204. "userAge":userage,
  205. "userBirthday":userbirthday,
  206. "userTel":usertel,
  207. "userSex":usersex
  208. };
  209. $.ajax({
  210. url:"../new",
  211. type:"POST",
  212. data:user,
  213. dataType:"json",
  214. success:function (data) {
  215. alert(data.status)
  216. if(data.status=="200"){
  217. $('#newUser').modal('hide');
  218. GridManager.refreshGrid('demo-baseCode');
  219. }
  220. },
  221. error:function (e) {
  222. alert("添加失败");
  223. }
  224. });
  225. }
  226. </script>
  227. </body>
  228. </html>

index.jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 86139
  4. Date: 2022/8/10
  5. Time: 10:10
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>主页</title>
  12. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
  13. <link rel="stylesheet" href="../static/plugins/fontawesome-free/css/all.min.css">
  14. <link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
  15. <link rel="stylesheet" href="../static/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css">
  16. <link rel="stylesheet" href="../static/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
  17. <link rel="stylesheet" href="../static/dist/css/adminlte.min.css">
  18. <link rel="stylesheet" href="../static/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
  19. <link rel="stylesheet" href="../static/plugins/daterangepicker/daterangepicker.css">
  20. <link rel="stylesheet" href="../static/plugins/summernote/summernote-bs4.min.css">
  21. </head>
  22. <body class="hold-transition sidebar-mini layout-fixed">
  23. <div class="wrapper">
  24. <!-- Navbar -->
  25. <nav class="main-header navbar navbar-expand navbar-white navbar-light">
  26. <!-- Left navbar links -->
  27. <ul class="navbar-nav">
  28. <li class="nav-item">
  29. <a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
  30. </li>
  31. <li class="nav-item d-none d-sm-inline-block">
  32. <a href="index3.html" class="nav-link">Home</a>
  33. </li>
  34. <li class="nav-item d-none d-sm-inline-block">
  35. <a href="#" class="nav-link">Contact</a>
  36. </li>
  37. </ul>
  38. <ul class="navbar-nav ml-auto">
  39. <!-- Notifications Dropdown Menu -->
  40. <li class="nav-item dropdown">
  41. <a class="nav-link" data-toggle="dropdown" href="#">
  42. <i class="nav-icon fas fa-user-circle"></i>
  43. Iron
  44. <i class="fas fa-angle-down right"></i>
  45. </a>
  46. <div class="dropdown-menu dropdown-menu-md dropdown-menu-right">
  47. <div class="dropdown-divider"></div>
  48. <a href="#" onclick="changePwd()" class="dropdown-item">
  49. <i class="fas fa-lock mr-2"></i>修改密码
  50. </a>
  51. <div class="dropdown-divider"></div>
  52. <a href="#" onclick="loginout()" class="dropdown-item">
  53. <i class="fas fa-sign-out-alt mr-2"></i>退出
  54. </a>
  55. </div>
  56. </li>
  57. </ul>
  58. </nav>
  59. <!-- /.navbar -->
  60. <!-- Main Sidebar Container -->
  61. <aside class="main-sidebar sidebar-dark-primary elevation-4">
  62. <!-- Brand Logo -->
  63. <a href="" class="brand-link">
  64. <img src="../static/dist/img/AdminLTELogo.png" alt="AdminLTE Logo" class="brand-image img-circle elevation-3" style="opacity: .8">
  65. <span class="brand-text font-weight-light">物流管理系统</span>
  66. </a>
  67. <!-- Sidebar -->
  68. <div class="sidebar">
  69. <!-- Sidebar user panel (optional) -->
  70. <div class="user-panel mt-3 pb-3 mb-3 d-flex">
  71. <div class="image">
  72. <img src="../static/dist/img/user2-160x160.jpg" class="img-circle elevation-2" alt="User Image">
  73. </div>
  74. <div class="info">
  75. <a href="#" class="d-block">Alexander Pierce</a>
  76. </div>
  77. </div>
  78. <!-- Sidebar Menu -->
  79. <nav class="mt-2">
  80. <ul id="sider" class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
  81. <!-- Add icons to the links using the .nav-icon class
  82. with font-awesome or any other icon font library -->
  83. <li class="nav-item">
  84. <a href="#" name="./home.jsp" class="nav-link active">
  85. <i class="nav-icon far fa-image"></i>
  86. <p>
  87. 首页
  88. </p>
  89. </a>
  90. </li>
  91. <li class="nav-item">
  92. <a href="#" class="nav-link">
  93. <i class="nav-icon fas fa-tachometer-alt"></i>
  94. <p>
  95. 用户管理
  96. <i class="right fas fa-angle-left"></i>
  97. </p>
  98. </a>
  99. <ul class="nav nav-treeview">
  100. <li class="nav-item">
  101. <a href="#" name="./user.jsp" class="nav-link">
  102. <i class="far fa-circle nav-icon"></i>
  103. <p>用户列表</p>
  104. </a>
  105. </li>
  106. </ul>
  107. </li>
  108. <li class="nav-item">
  109. <a href="#" class="nav-link">
  110. <i class="nav-icon fas fa-tachometer-alt"></i>
  111. <p>
  112. 物流管理
  113. <i class="right fas fa-angle-left"></i>
  114. </p>
  115. </a>
  116. <ul class="nav nav-treeview">
  117. <li class="nav-item">
  118. <a href="#" name="./logistics.jsp" class="nav-link">
  119. <i class="far fa-circle nav-icon"></i>
  120. <p>物流信息</p>
  121. </a>
  122. </li>
  123. </ul>
  124. </li>
  125. </ul>
  126. </nav>
  127. <!-- /.sidebar-menu -->
  128. </div>
  129. <!-- /.sidebar -->
  130. </aside>
  131. <div class="content-wrapper">
  132. <div class="content-header">
  133. <div class="container-fluid">
  134. <div class="row mb-2">
  135. <div class="col-sm-6">
  136. <h1 class="m-0">Dashboard</h1>
  137. </div><!-- /.col -->
  138. <div class="col-sm-6">
  139. <ol class="breadcrumb float-sm-right">
  140. <li class="breadcrumb-item"><a href="#">Home</a></li>
  141. <li class="breadcrumb-item active">Dashboard v1</li>
  142. </ol>
  143. </div><!-- /.col -->
  144. </div><!-- /.row -->
  145. </div><!-- /.container-fluid -->
  146. </div>
  147. <section class="content">
  148. <div class="container-fluid">
  149. <iframe id="ifr" src="./home.jsp" frameborder="0" scrolling="no" width="100%" height="100%">
  150. </iframe>
  151. </div>
  152. </section>
  153. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  154. <div class="modal-dialog" role="document">
  155. <div class="modal-content">
  156. <div class="modal-header">
  157. <h4 class="modal-title" id="myModalLabel1">修改密码</h4>
  158. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  159. </div>
  160. <div class="modal-body">
  161. <form class="form-horizontal">
  162. <input type="hidden" id="userId">
  163. <div class="form-group">
  164. <label for="UserName1" class="col-sm-2 control-label">用户名</label>
  165. <div class="col-sm-10">
  166. <input type="text" class="form-control" id="UserName1" placeholder="用户名">
  167. </div>
  168. </div>
  169. <div class="form-group">
  170. <label for="UserPwd1" class="col-sm-2 control-label">原密码</label>
  171. <div class="col-sm-10">
  172. <input type="text" class="form-control" id="UserPwd1" placeholder="原密码">
  173. </div>
  174. </div>
  175. <div class="form-group">
  176. <label for="UserPwd2" class="col-sm-2 control-label">新密码</label>
  177. <div class="col-sm-10">
  178. <input type="text" class="form-control" id="UserPwd2" placeholder="新密码">
  179. </div>
  180. </div>
  181. <div class="form-group">
  182. <label for="UserPwd3" class="col-sm-2 control-label" style="max-width: 20%">确认密码</label>
  183. <div class="col-sm-10">
  184. <input type="text" class="form-control" id="UserPwd3" placeholder="确认密码">
  185. </div>
  186. </div>
  187. </form>
  188. </div>
  189. <div class="modal-footer">
  190. <button type="button" class="btn btn-default" data-dismiss="modal" onclick="clearall()">关闭</button>
  191. <button type="button" onclick="checkPwd()" class="btn btn-primary">确认</button>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. </div>
  197. <!-- jQuery -->
  198. <script src="../static/plugins/jquery/jquery.min.js"></script>
  199. <script src="../static/plugins/jquery-ui/jquery-ui.min.js"></script>
  200. <script>
  201. $.widget.bridge('uibutton', $.ui.button)
  202. </script>
  203. <script src="../static/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
  204. <script src="../static/plugins/jquery-knob/jquery.knob.min.js"></script>
  205. <script src="../static/plugins/moment/moment.min.js"></script>
  206. <script src="../static/plugins/daterangepicker/daterangepicker.js"></script>
  207. <script src="../static/plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js"></script>
  208. <script src="../static/plugins/summernote/summernote-bs4.min.js"></script>
  209. <script src="../static/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
  210. <script src="../static/dist/js/adminlte.js"></script>
  211. <script src="../static/dist/js/demo.js"></script>
  212. <%--<script src="../static/dist/js/pages/dashboard.js"></script>--%>
  213. <script>
  214. $(document).ready(function () {
  215. $("#sider a").click(function () {
  216. $("a").removeClass("active");
  217. var a = $(this).closest(".menu-open").attr("class")
  218. var s = $(this).parent("li").parent("ul").attr("class");
  219. if(!(typeof (s)=="undefined"||s.search("nav-treeview")==(-1))){
  220. $(this).parent("li").parent("ul").prev().addClass("active");
  221. $(this).addClass("active");
  222. var url = $(this).attr("name");
  223. $("#ifr").attr("src",url);
  224. }else {
  225. if(a != undefined){
  226. $(this).addClass("active");
  227. return;
  228. }else {
  229. $(".menu-open").children("a").trigger("click");
  230. $("a").removeClass("active");
  231. var url = $(this).attr("name");
  232. $("#ifr").attr("src",url);
  233. }
  234. $(this).addClass("active");
  235. }
  236. });
  237. });
  238. function loginout() {
  239. $.ajax({
  240. url:"../sys/loginOut",
  241. type:"GET",
  242. success:function (data) {
  243. window.location.href="../view/login.jsp";
  244. }
  245. })
  246. }
  247. function changePwd() {
  248. $("#myModal").modal('show');
  249. }
  250. function clearall() {
  251. $("#UserName1").val("");
  252. $("#UserPwd1").val("");
  253. $("#UserPwd2").val("");
  254. $("#UserPwd3").val("");
  255. }
  256. function checkPwd() {
  257. var username = $("#UserName1").val();
  258. var userpwd = $("#UserPwd1").val();
  259. var newPwd = $("#UserPwd2").val();
  260. var newPwd2 = $("#UserPwd3").val();
  261. if (newPwd != newPwd2){
  262. alert("两次密码不一致")
  263. }else {
  264. var user={"userName":username,"userPwd":userpwd,"newPwd":newPwd}
  265. $.ajax({
  266. url:"../user/change",
  267. type:"Get",
  268. data:user,
  269. dataType:"JSON",
  270. success:function (data) {
  271. alert(data.status)
  272. if (data.status == "200"){
  273. alert("修改成功")
  274. }else {
  275. alert(data.message)
  276. }
  277. $("#myModal").modal('hide');
  278. }
  279. })
  280. }
  281. }
  282. </script>
  283. </body>
  284. </html>

 error.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. 权限不足,请联系管理员!
  8. </body>
  9. </html>

 logistics.jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 86139
  4. Date: 2022/8/10
  5. Time: 10:45
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>用户列表</title>
  12. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
  13. <link rel="stylesheet" href="../static/plugins/fontawesome-free/css/all.min.css">
  14. <link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
  15. <link rel="stylesheet" href="../static/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
  16. <link rel="stylesheet" href="../static/dist/css/adminlte.min.css">
  17. <link rel="stylesheet" href="../static/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
  18. <link rel="stylesheet" href="../static/plugins/daterangepicker/daterangepicker.css">
  19. <link rel="stylesheet" href="../static/plugins/summernote/summernote-bs4.min.css">
  20. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  21. <link rel="stylesheet" href="../static/gridmanager/css/gm.css">
  22. <script src="../static/gridmanager/js/gm.js"></script>
  23. </head>
  24. <body>
  25. <div class="row">
  26. <div class="col-12">
  27. <div class="card">
  28. <div class="card-header row">
  29. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  30. <div class="col-11">
  31. <form class="form-inline">
  32. <input type="text" class="form-control" id="orderTel" placeholder="收货号码">
  33. <button type="button" class="btn btn-default" onclick="searchOrders()">搜索</button>
  34. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  35. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  36. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  37. <button type="button" data-toggle='modal' data-target='#myModal1' class="btn btn-primary" id="insert">添加</button>
  38. </form>
  39. </div>
  40. </div>
  41. <!-- /.card-header -->
  42. <div class="card-body">
  43. <table id='table-demo-ajaxPageCode'></table>
  44. </div>
  45. <!-- /.card-body -->
  46. </div>
  47. </div>
  48. <!-- /.col -->
  49. </div>
  50. <%--用户修改--%>
  51. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  52. <div class="modal-dialog" role="document">
  53. <div class="modal-content">
  54. <div class="modal-header">
  55. <h4 class="modal-title" id="myModalLabel1">修改</h4>
  56. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  57. </div>
  58. <div class="modal-body">
  59. <form class="form-horizontal">
  60. <input type="hidden" id="orderId">
  61. <div class="form-group">
  62. <label for="orderPeople1" class="col-sm-2 control-label">收件人</label>
  63. <div class="col-sm-10">
  64. <input type="text" class="form-control" id="orderPeople1" placeholder="收件人">
  65. </div>
  66. </div>
  67. <div class="form-group">
  68. <label for="orderTel1" class="col-sm-2 control-label">电话</label>
  69. <div class="col-sm-10">
  70. <input type="text" class="form-control" id="orderTel1" placeholder="电话">
  71. </div>
  72. </div>
  73. <div class="form-group">
  74. <label for="orderFreight1" class="col-sm-2 control-label">运费</label>
  75. <div class="col-sm-10">
  76. <input type="number" class="form-control" id="orderFreight1" placeholder="运费">
  77. </div>
  78. </div>
  79. <div class="form-group">
  80. <label for="orderTime1" class="col-sm-2 control-label">日期</label>
  81. <div class="col-sm-10">
  82. <input type="date" class="form-control" id="orderTime1" placeholder="下单时间">
  83. </div>
  84. </div>
  85. <div class="form-group">
  86. <label for="giveMethod1" class="col-sm-2 control-label">物流</label>
  87. <div class="col-sm-10">
  88. <input type="text" class="form-control" id="giveMethod1" placeholder="配送方式">
  89. </div>
  90. </div>
  91. </form>
  92. </div>
  93. <div class="modal-footer">
  94. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
  95. <button type="button" onclick="updateOrders()" class="btn btn-primary">确认</button>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <%--用户添加--%>
  101. <div class="modal fade" id="myModal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  102. <div class="modal-dialog" role="document">
  103. <div class="modal-content">
  104. <div class="modal-header">
  105. <h4 class="modal-title" id="myModalLabel1">添加</h4>
  106. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  107. </div>
  108. <div class="modal-body">
  109. <form class="form-horizontal">
  110. <input type="hidden" id="orderId2">
  111. <div class="form-group">
  112. <label for="orderNo2" class="col-sm-2 control-label">编号</label>
  113. <div class="col-sm-10">
  114. <input type="text" class="form-control" id="orderNo2" placeholder="订单编号">
  115. </div>
  116. </div>
  117. <div class="form-group">
  118. <label for="orderPeople2" class="col-sm-2 control-label">收件人</label>
  119. <div class="col-sm-10">
  120. <input type="text" class="form-control" id="orderPeople2" placeholder="收件人">
  121. </div>
  122. </div>
  123. <div class="form-group">
  124. <label for="orderTel2" class="col-sm-2 control-label">电话</label>
  125. <div class="col-sm-10">
  126. <input type="text" class="form-control" id="orderTel2" placeholder="电话">
  127. </div>
  128. </div>
  129. <div class="form-group">
  130. <label for="orderFreight2" class="col-sm-2 control-label">运费</label>
  131. <div class="col-sm-10">
  132. <input type="number" class="form-control" id="orderFreight2" placeholder="运费">
  133. </div>
  134. </div>
  135. <div class="form-group">
  136. <label for="orderTime2" class="col-sm-2 control-label">日期</label>
  137. <div class="col-sm-10">
  138. <input type="date" class="form-control" id="orderTime2" placeholder="下单时间">
  139. </div>
  140. </div>
  141. <div class="form-group">
  142. <label for="giveMethod2" class="col-sm-2 control-label">物流</label>
  143. <div class="col-sm-10">
  144. <input type="text" class="form-control" id="giveMethod2" placeholder="配送方式">
  145. </div>
  146. </div>
  147. </form>
  148. </div>
  149. <div class="modal-footer">
  150. <button type="button" class="btn btn-default" data-dismiss="modal" onclick="clearall()">关闭</button>
  151. <button type="button" onclick="insertOrders()" class="btn btn-primary">确认</button>
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. <!-- /.row -->
  157. <!-- jQuery -->
  158. <script src="../static/plugins/jquery/jquery.min.js"></script>
  159. <script src="../static/plugins/jquery-ui/jquery-ui.min.js"></script>
  160. <script src="../static/jqPaginator.js"></script>
  161. <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
  162. <script src="../static/plugins/jquery-knob/jquery.knob.min.js"></script>
  163. <script src="../static/plugins/moment/moment.min.js"></script>
  164. <script src="../static/plugins/daterangepicker/daterangepicker.js"></script>
  165. <script src="../static/plugins/summernote/summernote-bs4.min.js"></script>
  166. <script src="../static/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
  167. <script src="../static/dist/js/adminlte.js"></script>
  168. <script>
  169. var respData;
  170. var cPage = null;
  171. var pSize = null;
  172. var ordertel = null;
  173. $(function () {
  174. // queryUsers();
  175. document.querySelector('#table-demo-ajaxPageCode').GM({
  176. gridManagerName: 'demo-baseCode',
  177. ajaxData: function (setting,params) {
  178. cPage = params.currentPage;
  179. pSize = params.pageSize;
  180. queryOrders(cPage,pSize,ordertel);
  181. return respData;
  182. },
  183. supportAjaxPage: true,
  184. sizeData: [4,8,12,16],
  185. pageSize: 4,
  186. currentPageKey: "currentPage",
  187. pageSizeKey: "pageSize",
  188. // ajaxType: 'POST',
  189. columnData: [
  190. {
  191. key: 'orderNo',
  192. text: '订单编号'
  193. },{
  194. key: 'orderPeople',
  195. text: '收货人'
  196. },{
  197. key: 'orderFreight',
  198. text: '运费'
  199. },{
  200. key: 'giveMethod',
  201. text: '配送方式'
  202. },{
  203. key: 'orderTime',
  204. text: '下单时间'
  205. },{
  206. key: 'orderTel',
  207. text: '电话'
  208. },{
  209. key: 'orderId',
  210. text: '操作',
  211. alien:'center',
  212. template:function (cell,row,index,key) {
  213. return "<button type='button' data-obj='"+JSON.stringify(row) +
  214. "' class= 'btn btn-success btn-sm'>编辑</button>&nbsp;&nbsp;&nbsp;&nbsp;" +
  215. "<button type='button' class= 'btn btn-success btn-sm' data-id='"+ cell +"'>删除</button>";
  216. }
  217. }
  218. ]
  219. });
  220. });
  221. function queryOrders(cPage,pSize,ordertel) {
  222. $.ajax({
  223. url:"../order/orderAll",
  224. type:"GET",
  225. dataType:"json",
  226. async:false,
  227. data:{"currentPage":cPage,"pageSize":pSize,"orderTel":ordertel},
  228. success:function (data) {
  229. if(data.status=="500"){
  230. window.location.href="../sys/error";
  231. }else
  232. respData = {"data":data.data,"totals":data.totals};
  233. }
  234. });
  235. }
  236. function searchOrders() {
  237. cPage = 1;
  238. pSize = 2;
  239. ordertel = $("#orderTel").val();
  240. GridManager.setQuery("demo-baseCode");
  241. }
  242. $("#table-demo-ajaxPageCode").on("click","button[data-id]",function () {
  243. var isDel = confirm("确认是否删除");
  244. if (isDel){
  245. var id = $(this).data("id");
  246. $.ajax({
  247. url:"../order/"+id,
  248. type: "delete",
  249. dataType: "json",
  250. success:function (data) {
  251. if (data.status=="200"){
  252. GridManager.refreshGrid('demo-baseCode');
  253. }else
  254. {
  255. alert("权限不足,请联系管理员");
  256. }
  257. },error:function (e) {
  258. alert("删除失败")
  259. }
  260. })
  261. }
  262. })
  263. $("#table-demo-ajaxPageCode").on("click","button[data-obj]",function () {
  264. // 数据回显
  265. var orders = $(this).data("obj");
  266. $("#orderId").val(orders.orderId);
  267. $("#orderPeople1").val(orders.orderPeople);
  268. $("#orderFreight1").val(orders.orderFreight);
  269. $("#giveMethod1").val(orders.giveMethod);
  270. $("#orderTime1").val(orders.orderTime);
  271. $("#orderTel1").val(orders.orderTel);
  272. // 显示模态版
  273. $("#myModal").modal('show');
  274. })
  275. function updateOrders() {
  276. var id = $("#orderId").val();
  277. var name = $("#orderPeople1").val();
  278. var freight = $("#orderFreight1").val();
  279. var method = $("#giveMethod1").val();
  280. var time = $("#orderTime1").val();
  281. var tel = $("#orderTel1").val();
  282. var orders = {
  283. "orderId":id,
  284. "orderPeople":name,
  285. "orderFreight":freight,
  286. "giveMethod":method,
  287. "orderTime":time,
  288. "orderTel":tel
  289. };
  290. $.ajax({
  291. url:"../order/",
  292. type:"put",
  293. contentType:"application/json",
  294. dataType:"json",
  295. data:JSON.stringify(orders),
  296. success:function (data) {
  297. if (data.status=="200"){
  298. $("#myModal").modal('hide');
  299. GridManager.refreshGrid('demo-baseCode');
  300. console.log(id)
  301. }else {
  302. alert("权限不足,无法修改")
  303. }
  304. }
  305. })
  306. }
  307. $("#insert").click(function () {
  308. $("#myModal2").modal('show');
  309. })
  310. function insertOrders() {
  311. var no = $("#orderNo2").val();
  312. var name = $("#orderPeople2").val();
  313. var freight = $("#orderFreight2").val();
  314. var method = $("#giveMethod2").val();
  315. var time = $("#orderTime2").val();
  316. var tel = $("#orderTel2").val();
  317. var orders = {
  318. "orderNo":no,
  319. "orderPeople":name,
  320. "orderFreight":freight,
  321. "giveMethod":method,
  322. "orderTime":time,
  323. "orderTel":tel
  324. };
  325. $.ajax({
  326. url:"../order/insert",
  327. type:"put",
  328. contentType:"application/json",
  329. dataType:"json",
  330. data:JSON.stringify(orders),
  331. success:function (data) {
  332. if (data.status=="200"){
  333. alert("添加成功")
  334. }else if (data.status=="500"){
  335. alert(data.message)
  336. }else
  337. alert("权限不足")
  338. $("#myModal2").modal('hide');
  339. GridManager.refreshGrid('demo-baseCode');
  340. }
  341. })
  342. }
  343. function clearall() {
  344. $("#orderNo2").val("");
  345. $("#orderPeople2").val("");
  346. $("#orderFreight2").val("");
  347. $("#giveMethod2").val("");
  348. $("#orderTime2").val("");
  349. $("#orderTel2").val("");
  350. }
  351. </script>
  352. </body>
  353. </html>

user.jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 86139
  4. Date: 2022/8/10
  5. Time: 10:45
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>用户列表</title>
  12. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
  13. <link rel="stylesheet" href="../static/plugins/fontawesome-free/css/all.min.css">
  14. <link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
  15. <link rel="stylesheet" href="../static/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
  16. <link rel="stylesheet" href="../static/dist/css/adminlte.min.css">
  17. <link rel="stylesheet" href="../static/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
  18. <link rel="stylesheet" href="../static/plugins/daterangepicker/daterangepicker.css">
  19. <link rel="stylesheet" href="../static/plugins/summernote/summernote-bs4.min.css">
  20. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  21. <link rel="stylesheet" href="../static/gridmanager/css/gm.css">
  22. <script src="../static/gridmanager/js/gm.js"></script>
  23. </head>
  24. <body>
  25. <div class="row">
  26. <div class="col-12">
  27. <div class="card">
  28. <div class="card-header row">
  29. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  30. <div class="col-11">
  31. <form class="form-inline">
  32. <label for="username">用户名</label>
  33. <input type="text" class="form-control" id="username" placeholder="用户名">
  34. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  35. <label for="usertel">电话</label>
  36. <input type="tel" class="form-control" id="usertel" placeholder="电话">
  37. <button type="button" class="btn btn-default" onclick="searchUser()">搜索</button>
  38. </form>
  39. </div>
  40. </div>
  41. <!-- /.card-header -->
  42. <div class="card-body">
  43. <table id='table-demo-ajaxPageCode'></table>
  44. </div>
  45. <!-- /.card-body -->
  46. </div>
  47. </div>
  48. <!-- /.col -->
  49. </div>
  50. <%--用户修改--%>
  51. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  52. <div class="modal-dialog" role="document">
  53. <div class="modal-content">
  54. <div class="modal-header">
  55. <h4 class="modal-title" id="myModalLabel1">用户修改</h4>
  56. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  57. </div>
  58. <div class="modal-body">
  59. <form class="form-horizontal">
  60. <input type="hidden" id="userId">
  61. <div class="form-group">
  62. <label for="UserName1" class="col-sm-2 control-label">用户名</label>
  63. <div class="col-sm-10">
  64. <input type="text" class="form-control" id="UserName1" placeholder="用户名">
  65. </div>
  66. </div>
  67. <div class="form-group">
  68. <label for="UserAge1" class="col-sm-2 control-label">年龄</label>
  69. <div class="col-sm-10">
  70. <input type="number" class="form-control" id="UserAge1" placeholder="年龄">
  71. </div>
  72. </div>
  73. <div class="form-group">
  74. <label class="col-sm-2 control-label">性别</label>
  75. <div class="col-sm-10">
  76. <label class="radio-inline">
  77. <input type="radio" name="gender" id="inlineRadio11" value="男">
  78. </label>
  79. <label class="radio-inline">
  80. <input type="radio" name="gender" id="inlineRadio21" value="女">
  81. </label>
  82. </div>
  83. </div>
  84. <div class="form-group">
  85. <label for="UserTel1" class="col-sm-2 control-label">电话</label>
  86. <div class="col-sm-10">
  87. <input type="text" class="form-control" id="UserTel1" placeholder="电话">
  88. </div>
  89. </div>
  90. <div class="form-group">
  91. <label for="UserBir1" class="col-sm-2 control-label">日期</label>
  92. <div class="col-sm-10">
  93. <input type="date" class="form-control" id="UserBir1" placeholder="日期">
  94. </div>
  95. </div>
  96. <div class="form-group">
  97. <label for="UserEmail1" class="col-sm-2 control-label">邮箱</label>
  98. <div class="col-sm-10">
  99. <input type="email" class="form-control" id="UserEmail1" placeholder="邮箱">
  100. </div>
  101. </div>
  102. </form>
  103. </div>
  104. <div class="modal-footer">
  105. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
  106. <button type="button" onclick="updateUser()" class="btn btn-primary">确认</button>
  107. </div>
  108. </div>
  109. </div>
  110. </div>
  111. <!-- /.row -->
  112. <!-- jQuery -->
  113. <script src="../static/plugins/jquery/jquery.min.js"></script>
  114. <script src="../static/plugins/jquery-ui/jquery-ui.min.js"></script>
  115. <script src="../static/jqPaginator.js"></script>
  116. <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
  117. <script src="../static/plugins/jquery-knob/jquery.knob.min.js"></script>
  118. <script src="../static/plugins/moment/moment.min.js"></script>
  119. <script src="../static/plugins/daterangepicker/daterangepicker.js"></script>
  120. <script src="../static/plugins/summernote/summernote-bs4.min.js"></script>
  121. <script src="../static/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
  122. <script src="../static/dist/js/adminlte.js"></script>
  123. <script>
  124. var respData;
  125. var cPage = null;
  126. var pSize = null;
  127. var username = null;
  128. var usertel = null;
  129. $(function () {
  130. // queryUsers();
  131. document.querySelector('#table-demo-ajaxPageCode').GM({
  132. gridManagerName: 'demo-baseCode',
  133. ajaxData: function (setting,params) {
  134. cPage = params.currentPage;
  135. pSize = params.pageSize;
  136. queryUsers(cPage,pSize,username,usertel);
  137. return respData;
  138. },
  139. supportAjaxPage: true,
  140. sizeData: [5,10,15,20],
  141. pageSize: 5,
  142. currentPageKey: "currentPage",
  143. pageSizeKey: "pageSize",
  144. // ajaxType: 'POST',
  145. columnData: [
  146. {
  147. key: 'userName',
  148. text: '用户名'
  149. },{
  150. key: 'userSex',
  151. text: '性别'
  152. },{
  153. key: 'userAge',
  154. text: '年龄'
  155. },{
  156. key: 'userTel',
  157. text: '电话'
  158. },{
  159. key: 'userBirthday',
  160. text: '日期'
  161. },{
  162. key: 'userEmail',
  163. text: '邮箱'
  164. },{
  165. key: 'userId',
  166. text: '操作',
  167. alien:'center',
  168. template:function (cell,row,index,key) {
  169. return "<button type='button' data-obj='"+JSON.stringify(row) +
  170. "' class= 'btn btn-success btn-sm'>编辑</button>&nbsp;&nbsp;&nbsp;&nbsp;" +
  171. "<button type='button' class= 'btn btn-success btn-sm' data-id='"+ cell +"'>删除</button>";
  172. }
  173. }
  174. ]
  175. });
  176. });
  177. function queryUsers(cPage,pSize,username,usertel) {
  178. $.ajax({
  179. url:"../user/all",
  180. type:"GET",
  181. dataType:"json",
  182. async:false,
  183. data:{"currentPage":cPage,"pageSize":pSize,"userName":username,"userTel":usertel},
  184. success:function (data) {
  185. if(data.status=="500"){
  186. window.location.href="../sys/error";
  187. }else
  188. respData = {"data":data.data,"totals":data.totals};
  189. }
  190. });
  191. }
  192. $("#table-demo-ajaxPageCode").on("click","button[data-id]",function () {
  193. var isDel = confirm("确认是否删除");
  194. if (isDel){
  195. var id = $(this).data("id");
  196. $.ajax({
  197. url:"../user/"+id,
  198. type: "delete",
  199. dataType: "json",
  200. success:function (data) {
  201. if (data.status=="200"){
  202. GridManager.refreshGrid('demo-baseCode');
  203. }else
  204. {
  205. alert("权限不足,请联系管理员");
  206. }
  207. },error:function (e) {
  208. alert("删除失败")
  209. }
  210. })
  211. }
  212. })
  213. $("#table-demo-ajaxPageCode").on("click","button[data-obj]",function () {
  214. // 数据回显
  215. var user = $(this).data("obj");
  216. $("#userId").val(user.userId);
  217. $("#UserName1").val(user.userName);
  218. $("#UserAge1").val(user.userAge);
  219. $("#UserTel1").val(user.userTel);
  220. $("#UserEmail1").val(user.userEmail);
  221. $("#UserBir1").val(user.userBirthday);
  222. var sex = user.userSex;
  223. if (sex=="男"){
  224. $("#inlineRadio11").prop("checked",true);
  225. }else if (sex =="女"){
  226. $("#inlineRadio21").prop("checked",true);
  227. }
  228. // 显示模态版
  229. $("#myModal").modal('show');
  230. })
  231. function updateUser() {
  232. var id = $("#userId").val();
  233. var name = $("#UserName1").val();
  234. var age = $("#UserAge1").val();
  235. var tel = $("#UserTel1").val();
  236. var email = $("#UserEmail1").val();
  237. var bir = $("#UserBir1").val();
  238. var sex = $("input[type='radio']:checked").val();
  239. var users = {
  240. "userId":id,
  241. "userName":name,
  242. "userAge":age,
  243. "userTel":tel,
  244. "userEmail":email,
  245. "userBirthday":bir,
  246. "userSex":sex,
  247. };
  248. $.ajax({
  249. url:"../user/",
  250. type:"put",
  251. contentType:"application/json",
  252. dataType:"json",
  253. data:JSON.stringify(users),
  254. success:function (data) {
  255. if (data.status=="200"){
  256. $("#myModal").modal('hide');
  257. GridManager.refreshGrid('demo-baseCode');
  258. console.log(id)
  259. }
  260. }
  261. })
  262. }
  263. function searchUser() {
  264. cPage = 1;
  265. pSize = 2;
  266. username = $("#username").val();
  267. usertel = $("#usertel").val();
  268. GridManager.setQuery("demo-baseCode");
  269. }
  270. </script>
  271. </body>
  272. </html>

 11.controller

usercontroller

  1. package com.hqyj.poison.controller;
  2. import com.hqyj.poison.entity.Pwd;
  3. import com.hqyj.poison.entity.User;
  4. import com.hqyj.poison.query.QueryOrderBean;
  5. import com.hqyj.poison.query.QueryUserBean;
  6. import com.hqyj.poison.result.ResultInfo;
  7. import com.hqyj.poison.service.UserService;
  8. import com.hqyj.poison.utils.MD5Util;
  9. import org.apache.ibatis.annotations.Param;
  10. import org.apache.shiro.authz.annotation.Logical;
  11. import org.apache.shiro.authz.annotation.RequiresRoles;
  12. import org.apache.shiro.crypto.hash.SimpleHash;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.web.bind.annotation.*;
  16. @Controller
  17. @RequestMapping("/user")
  18. public class UserController {
  19. @Autowired
  20. private UserService userService;
  21. @RequiresRoles(value = {"admin"})
  22. //角色权限限制
  23. @RequestMapping("/all")
  24. @ResponseBody
  25. public ResultInfo queryUsers(QueryUserBean queryUserBean){
  26. return userService.selectUsers(queryUserBean);
  27. }
  28. @RequiresRoles(value = {"admin","user"},logical = Logical.OR)
  29. //or代表二选一皆可;and代表同时满足
  30. @RequestMapping("/change")
  31. @ResponseBody
  32. public ResultInfo queryUsersByIdAndPwd(Pwd pwd){
  33. System.out.println(pwd.getUserName());
  34. System.out.println(pwd.getUserPwd());
  35. System.out.println(pwd.getNewPwd());
  36. String password = new SimpleHash("MD5",pwd.getUserPwd(),pwd.getUserName(),1024).toString();
  37. pwd.setUserPwd(password);
  38. User users = userService.queryUsersByIdAndPwd(pwd);
  39. if (users!=null){
  40. String md5 = MD5Util.getPasswordByMD5(pwd.getNewPwd(),pwd.getUserName());
  41. System.out.println(md5);
  42. pwd.setUserPwd(md5);
  43. return userService.updateUserPwdByName(pwd);
  44. }
  45. return new ResultInfo("500","密码错误");
  46. }
  47. @RequiresRoles(value = {"admin"})
  48. @DeleteMapping("/{id}")
  49. @ResponseBody
  50. public ResultInfo deleteUsers(@PathVariable("id") Integer userId){
  51. return userService.deleteUserById(userId);
  52. }
  53. @RequiresRoles(value = {"admin"})
  54. @PutMapping("/")
  55. @ResponseBody
  56. public ResultInfo updateUser(@RequestBody User user){
  57. return userService.updateUserById(user);
  58. }
  59. }

 newUsercontroller

  1. package com.hqyj.poison.controller;
  2. import com.hqyj.poison.entity.User;
  3. import com.hqyj.poison.result.ResultInfo;
  4. import com.hqyj.poison.service.UserService;
  5. import com.hqyj.poison.utils.MD5Util;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.GetMapping;
  9. import org.springframework.web.bind.annotation.PostMapping;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.ResponseBody;
  12. @Controller
  13. @RequestMapping("/new")
  14. public class newUserController {
  15. @Autowired
  16. private UserService userService;
  17. @PostMapping
  18. @ResponseBody
  19. public ResultInfo newUser(User user){
  20. //注册密码加密
  21. String md5 = MD5Util.getPasswordByMD5(user.getUserPwd(), user.getUserName());
  22. user.setUserPwd(md5);
  23. return userService.newUser(user);
  24. }
  25. }

ExceptionController(处理异常的cotroller) 

  1. package com.hqyj.poison.controller;
  2. import com.hqyj.poison.result.ResultInfo;
  3. import org.apache.shiro.authz.AuthorizationException;
  4. import org.springframework.core.Ordered;
  5. import org.springframework.core.annotation.Order;
  6. import org.springframework.web.bind.annotation.ControllerAdvice;
  7. import org.springframework.web.bind.annotation.ExceptionHandler;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. import javax.servlet.http.HttpServletRequest;
  10. @ControllerAdvice
  11. public class ExceptionController {
  12. /**
  13. * 集中处理 controller 层 AuthorizationException 异常
  14. */
  15. @ExceptionHandler(value= {AuthorizationException.class})
  16. @Order(Ordered.HIGHEST_PRECEDENCE)
  17. @ResponseBody
  18. public ResultInfo handlerAccessDeniedException(HttpServletRequest request,
  19. AuthorizationException exception){
  20. return new ResultInfo("500", "noPermission");
  21. }
  22. }

 SystemCotroller

  1. package com.hqyj.poison.controller;
  2. import com.hqyj.poison.entity.User;
  3. import com.hqyj.poison.result.ResultInfo;
  4. import com.hqyj.poison.service.UserService;
  5. import org.apache.shiro.SecurityUtils;
  6. import org.apache.shiro.authz.annotation.RequiresAuthentication;
  7. import org.apache.shiro.subject.Subject;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.PostMapping;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.ResponseBody;
  14. @Controller
  15. @RequestMapping("/sys")
  16. public class SystemController {
  17. @Autowired
  18. private UserService userService;
  19. @PostMapping("/login")
  20. @ResponseBody
  21. public ResultInfo login(String userName, String userPwd){
  22. return userService.login(userName,userPwd);
  23. }
  24. @RequiresAuthentication
  25. @GetMapping("/loginOut")
  26. public ResultInfo logout() {
  27. //在这里执行退出系统前需要清空的数据
  28. Subject subject = SecurityUtils.getSubject();
  29. if(subject.isAuthenticated()) {
  30. subject.logout();
  31. }
  32. System.out.println("退出登录成功");
  33. return new ResultInfo("200","success");
  34. }
  35. }
odercontroller
  1. package com.hqyj.poison.controller;
  2. import com.hqyj.poison.entity.Order;
  3. import com.hqyj.poison.entity.User;
  4. import com.hqyj.poison.query.QueryOrderBean;
  5. import com.hqyj.poison.result.ResultInfo;
  6. import com.hqyj.poison.service.UserService;
  7. import org.apache.shiro.authz.annotation.Logical;
  8. import org.apache.shiro.authz.annotation.RequiresRoles;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.*;
  12. @Controller
  13. @RequestMapping("/order")
  14. public class OrderController {
  15. @Autowired
  16. private UserService userService;
  17. @RequiresRoles(value = {"admin","user"},logical = Logical.OR)
  18. @RequestMapping("/orderAll")
  19. @ResponseBody
  20. public ResultInfo queryOrder(QueryOrderBean queryOrderBean){
  21. return userService.selectOrders(queryOrderBean);
  22. }
  23. @RequiresRoles(value = {"admin"})
  24. @DeleteMapping("/{id}")
  25. @ResponseBody
  26. public ResultInfo deleteOrder(@PathVariable("id") Integer orderId){
  27. return userService.deleteOrderById(orderId);
  28. }
  29. @RequiresRoles(value = {"admin"})
  30. @PutMapping("/")
  31. @ResponseBody
  32. public ResultInfo updateOrder(@RequestBody Order order){
  33. return userService.updateOrderById(order);
  34. }
  35. @RequiresRoles(value = {"admin"})
  36. @PutMapping("/insert")
  37. @ResponseBody
  38. public ResultInfo insertOrder(@RequestBody Order order){
  39. String orderNo = order.getOrderNo();
  40. Order orders = userService.queryOrders(orderNo);
  41. if (orders==null){
  42. return userService.insertOrder(order);
  43. }
  44. else
  45. return new ResultInfo("500","该订单已存在");
  46. }
  47. }

pageController

  1. package com.hqyj.poison.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. @RequestMapping("/sys")
  6. public class PageController {
  7. @RequestMapping("/gologin")
  8. public String goLogin(){
  9. return "login";
  10. }
  11. @RequestMapping("/index")
  12. public String goIndex(){
  13. return "index";
  14. }
  15. @RequestMapping("/error")
  16. public String doError(){
  17. return "error";
  18. }
  19. }

 12.关于加密:MD5

Myrealm

  1. package com.hqyj.poison.realm;
  2. import com.hqyj.poison.entity.Role;
  3. import com.hqyj.poison.entity.User;
  4. import com.hqyj.poison.service.UserService;
  5. import org.apache.shiro.SecurityUtils;
  6. import org.apache.shiro.authc.AuthenticationException;
  7. import org.apache.shiro.authc.AuthenticationInfo;
  8. import org.apache.shiro.authc.AuthenticationToken;
  9. import org.apache.shiro.authc.SimpleAuthenticationInfo;
  10. import org.apache.shiro.authz.AuthorizationInfo;
  11. import org.apache.shiro.authz.SimpleAuthorizationInfo;
  12. import org.apache.shiro.realm.AuthorizingRealm;
  13. import org.apache.shiro.subject.PrincipalCollection;
  14. import org.apache.shiro.util.ByteSource;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import java.util.HashSet;
  17. import java.util.List;
  18. import java.util.Set;
  19. public class MyRealm extends AuthorizingRealm {
  20. @Autowired
  21. private UserService userService;
  22. @Override
  23. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
  24. SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
  25. // 获取用户名
  26. String userName = (String) principalCollection.getPrimaryPrincipal();
  27. // 根据用户名查询所对应的角色
  28. User user = userService.queryUserAndRole(userName);
  29. // 用来存放角色名称的集合
  30. Set<String> roleNames = new HashSet<>();
  31. // 当前用户对应的角色
  32. List<Role> roles = user.getRoleList();
  33. for (Role role : roles) {
  34. //将用户名所对应的的角色名称放入集合中
  35. roleNames.add(role.getRoleName());
  36. }
  37. simpleAuthorizationInfo.addRoles(roleNames);
  38. return simpleAuthorizationInfo;
  39. }
  40. @Override
  41. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
  42. String userName = (String) authenticationToken.getPrincipal();
  43. User user = userService.queryUser(userName);
  44. // 将查询出来的用户存放到shiro提供的session中
  45. SecurityUtils.getSubject().getSession().setAttribute("u",user);
  46. // 该用户不存在
  47. if(user==null){
  48. return null;
  49. }
  50. // 获取盐
  51. ByteSource salt = ByteSource.Util.bytes(userName);
  52. // 返回认证信息由父类AuthenticatingRealm进行认证
  53. // getName() :父类的一个方法,获取当前数据源的名称(MyRealm)
  54. SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(userName,user.getUserPwd(),salt,getName());
  55. return simpleAuthenticationInfo;
  56. }
  57. }

工具类:Util中

 

MD5Util
  1. package com.hqyj.poison.utils;
  2. import org.apache.shiro.crypto.hash.SimpleHash;
  3. public class MD5Util {
  4. private String userPassword;
  5. private String userName;
  6. public static String getPasswordByMD5(String password,String salt){
  7. String simpleHash = new SimpleHash("MD5",password,salt,1024).toString();
  8. return simpleHash;
  9. }
  10. }

 13.关于分页部分:

这个部分相对而言比较难,因此,我个人觉得可以不实现,直接使用表单返回查询和显示的数据也是可以的。(此处运用了gridmanaer:GridManager - Demo (lovejavascript.com)

 

 

QueryOrderBean:

  1. package com.hqyj.poison.query;
  2. import lombok.Data;
  3. @Data
  4. public class QueryOrderBean {
  5. private Integer currentPage;
  6. private Integer pageSize;
  7. private String orderName;
  8. private String orderTel;
  9. private Integer startIndex;
  10. public Integer getStartIndex() {
  11. return this.startIndex = (this.currentPage-1)*this.pageSize; }
  12. }

QueryUserBean: 

  1. package com.hqyj.poison.query;
  2. import lombok.Data;
  3. @Data
  4. public class QueryUserBean {
  5. // 当前页码
  6. private Integer currentPage;
  7. // 每页展示的条数
  8. private Integer pageSize;
  9. // 搜索条件
  10. private String userName;
  11. private String userTel;
  12. private Integer startIndex;
  13. public Integer getStartIndex() {
  14. return this.startIndex = (this.currentPage-1)*this.pageSize; }
  15. }

 Resultlnfo:

  1. package com.hqyj.poison.result;
  2. import com.hqyj.poison.entity.User;
  3. import lombok.Data;
  4. import java.util.List;
  5. @Data
  6. public class ResultInfo {
  7. private String status;
  8. private Integer totals;
  9. private String message;
  10. private Object data;
  11. //返回出错
  12. public ResultInfo(String status, String message) {
  13. this.status = status;
  14. this.message = message;
  15. }
  16. //返回grid渲染表格的数据
  17. public ResultInfo(String status, Integer totals, Object data) {
  18. this.status = status;
  19. this.totals = totals;
  20. this.data = data;
  21. }
  22. //返回不需要分页的数据
  23. public ResultInfo(String status, String message, Object data) {
  24. this.status = status;
  25. this.message = message;
  26. this.data = data;
  27. }
  28. }

结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/48929
推荐阅读
相关标签
  

闽ICP备14008679号