赞
踩
ssm框架原理是:将Spring、SpringMVC、MyBatis整合在一起,作为数据源较简单的web项目的框架。 它有效规避servlet的繁杂加载驱动等一系列程序,选用MyBatis进行与数据库的连接。
目录
3.Mybatis的配置文件db.properties 和log4j.properties(日志)






- <?xml version="1.0" encoding="UTF-8"?>
-
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>com.hqyj.poison</groupId>
- <artifactId>ssm</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>war</packaging>
-
- <name>ssm Maven Webapp</name>
- <!-- FIXME change it to the project's website -->
- <url>http://www.example.com</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <maven.compiler.source>1.7</maven.compiler.source>
- <maven.compiler.target>1.7</maven.compiler.target>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- <scope>test</scope>
- </dependency>
-
- <!--spring -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>4.3.13.RELEASE</version>
- </dependency>
- <!--事务-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-tx</artifactId>
- <version>4.3.13.RELEASE</version>
- </dependency>
-
- <!--spring jdbc-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>4.3.13.RELEASE</version>
- </dependency>
- <!--配置webmvc -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>4.3.13.RELEASE</version>
- </dependency>
-
- <!--配置切面的jar包 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-aspects</artifactId>
- <version>4.3.13.RELEASE</version>
- </dependency>
-
- <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
- <dependency>
- <groupId>aopalliance</groupId>
- <artifactId>aopalliance</artifactId>
- <version>1.0</version>
- </dependency>
-
- <!--mybatis,用来加载SqlSessionFactoryBean和MapperScannerConfigurer -->
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.5.0</version>
- </dependency>
- <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
- <!--spring整合mybatis的依赖包-->
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis-spring</artifactId>
- <version>1.3.2</version>
- </dependency>
-
- <!-- mybatis分页需要的jar -->
- <dependency>
- <groupId>com.github.pagehelper</groupId>
- <artifactId>pagehelper</artifactId>
- <version>5.1.2</version>
- </dependency>
- <!-- 连接池,用来加载DruidDataSource-->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.0.9</version>
- </dependency>
- <!--json处理工具包 -->
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.9.0</version>
- </dependency>
- <!--日志文件 -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.7.22</version>
- </dependency>
- <!--servlet相关jar-->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.5</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jsp-api</artifactId>
- <version>2.0</version>
- </dependency>
-
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.38</version>
- </dependency>
-
- <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-all -->
- <dependency>
- <groupId>org.apache.shiro</groupId>
- <artifactId>shiro-all</artifactId>
- <version>1.3.2</version>
- </dependency>
-
- <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.12</version>
- <scope>provided</scope>
- </dependency>
-
- </dependencies>
-
- <build>
- <finalName>ssm</finalName>
- <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
- <plugins>
- <plugin>
- <artifactId>maven-clean-plugin</artifactId>
- <version>3.1.0</version>
- </plugin>
- <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
- <plugin>
- <artifactId>maven-resources-plugin</artifactId>
- <version>3.0.2</version>
- </plugin>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.8.0</version>
- </plugin>
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.22.1</version>
- </plugin>
- <plugin>
- <artifactId>maven-war-plugin</artifactId>
- <version>3.2.2</version>
- </plugin>
- <plugin>
- <artifactId>maven-install-plugin</artifactId>
- <version>2.5.2</version>
- </plugin>
- <plugin>
- <artifactId>maven-deploy-plugin</artifactId>
- <version>2.8.2</version>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
- </project>

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

@Data注解可以省略get、set方法,但是使用需要下载lombok插件。
关于@JsonFormat注解,跳转连接如下:jackSon中@JsonFormat注解使用详解_灬叛逆丿文的博客-CSDN博客_jsonformat注解原理
- package com.hqyj.poison.entity;
-
- import com.fasterxml.jackson.annotation.JsonFormat;
- import lombok.Data;
- import org.springframework.format.annotation.DateTimeFormat;
-
- import java.util.Date;
- import java.util.List;
-
- @Data
- public class User {
- private Integer userId;
- private String userName;
- private String userPwd;
- private String userSex;
- private Integer userAge;
- private String userTel;
- @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
- @DateTimeFormat(pattern = "yyyy-MM-dd")
- private Date userBirthday;
- private String userEmail;
- private List<Role> roleList;
- }

- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <!--以当前mapper接口的完全限定名作为命名空间-->
- <mapper namespace="com.hqyj.poison.mapper.UserMapper">
- <resultMap id="userMap" type="User">
- <!--colum是数据库的字段名;property是java类中的属性名。-->
- <id column="user_id" property="userId"></id>
- <result column="user_name" property="userName"></result>
- <result column="user_tel" property="userTel"></result>
- <result column="user_age" property="userAge"></result>
- <result column="user_sex" property="userSex"></result>
- <result column="user_password" property="userPwd"></result>
- <result column="user_email" property="userEmail"></result>
- <result column="user_birthday" property="userBirthday"></result>
- </resultMap>
-
- <resultMap id="userMap1" type="User">
- <id column="id" property="userId"></id>
- <result column="user_name" property="userName"></result>
- <result column="user_tel" property="userTel"></result>
- <result column="user_age" property="userAge"></result>
- <result column="user_sex" property="userSex"></result>
- <result column="user_password" property="userPwd"></result>
- <result column="user_email" property="userEmail"></result>
- <result column="user_birthday" property="userBirthday"></result>
- <collection property="roleList" ofType="Role">
- <id column="role_id" property="roleId"></id>
- <result column="role_name" property="roleName"></result>
- </collection>
- </resultMap>
- <resultMap id="orderMap" type="Order">
- <id column="order_id" property="orderId"></id>
- <result column="order_no" property="orderNo"></result>
- <result column="order_people" property="orderPeople"></result>
- <result column="order_freight" property="orderFreight"></result>
- <result column="order_tel" property="orderTel"></result>
- <result column="give_method" property="giveMethod"></result>
- <result column="order_time" property="orderTime"></result>
- </resultMap>
-
- <!-- 订单表-->
- <!-- 查询订单id与方法名相一致-->
- <select id="selectOrderByQueryBean" resultMap="orderMap">
- select * from orders
- <where>
- <if test="orderTel!=null and orderTel!=''"> and order_tel =#{orderTel} </if>
- </where>
- limit #{startIndex},#{pageSize}
- </select>
- <!--订单总数-->
- <select id="selectCountToOrder" resultType="int">
- select count(*) from orders
- <where>
- <if test="orderTel!=null and orderTel!=''"> and order_tel =#{orderTel} </if>
- </where>
- </select>
- <!--删除订单-->
- <delete id="deleteOrderById"> delete from orders where order_id = #{orderId} </delete>
- <!-- 修改订单-->
- <update id="updateOrder"> update orders set
- order_people = #{orderPeople}, order_freight = #{orderFreight}, order_tel = #{orderTel},
- give_method = #{giveMethod}, order_time = #{orderTime}
- where order_id = #{orderId}
- </update>
- <!-- 按编号查询-->
- <select id="selectOrderByNo" resultMap="orderMap">
- select * from orders where order_no = #{orderNo}
- </select>
- <!--增加订单-->
- <insert id="insertOrder">
- insert into orders
- <trim prefix="(" suffix=")" suffixOverrides=",">
- <if test="orderPeople!=null and orderPeople!=''">
- order_people,
- </if>
- <if test="orderNo!=null and orderNo!=''">
- order_no,
- </if>
- <if test="orderFreight!=null and orderFreight!=''">
- order_freight,
- </if>
- <if test="orderTel!=null and orderTel!=''">
- order_tel,
- </if>
- <if test="giveMethod!=null and giveMethod!=''">
- give_method,
- </if>
- <if test="orderTime!=null">
- order_time,
- </if>
- </trim>
- values
- <trim prefix="(" suffix=")" suffixOverrides=",">
- <if test="orderPeople!=null and orderPeople!=''">
- #{orderPeople},
- </if>
- <if test="orderNo!=null and orderNo!=''">
- #{orderNo},
- </if>
- <if test="orderFreight!=null and orderFreight!=''">
- #{orderFreight},
- </if>
- <if test="orderTel!=null and orderTel!=''">
- #{orderTel},
- </if>
- <if test="giveMethod!=null and giveMethod!=''">
- #{giveMethod},
- </if>
- <if test="orderTime!=null">
- #{orderTime},
- </if>
- </trim>
- </insert>
-
-
- <!-- 用户表-->
- <select id="selectUser" resultMap="userMap"> select * from user where user_name=#{userName} </select>
- <!-- 查询权限-->
- <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>
- <!-- 查询用户-->
- <select id="selectUserByQueryBean" resultMap="userMap">
- select * from user
- <where>
- <if test="userName!=null and userName!=''"> and user_name like concat(#{userName},"%") </if>
- <if test="userTel!=null and userTel!=''"> and user_tel like concat(#{userTel},"%") </if>
- </where>
- limit #{startIndex},#{pageSize}
- </select>
- <!-- 查询账号密码是否一致-->
- <select id="queryUsersByIdAndPwd" resultMap="userMap">
- select * from user where user_name = #{userName} and user_password = #{userPwd}
- </select>
- <!-- 修改密码-->
- <update id="updateUserPwdByName">
- update user set user_password = #{userPwd} where user_name = #{userName}
- </update>
- <!-- 统计用户数量-->
- <select id="selectCount" resultType="int">
- select count(*) from user
- <where>
- <if test="userName!=null and userName!=''"> and user_name like concat(#{userName},"%") </if>
- <if test="userTel!=null and userTel!=''"> and user_tel like concat(#{userTel},"%") </if>
- </where>
- </select>
- <!-- 删除用户-->
- <delete id="deleteUserById"> delete from user where user_id = #{userId} </delete>
- <!-- 修改用户-->
- <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>
-
-
- <!-- 注册-->
- <insert id="registered">
- insert into user
- <trim prefix="(" suffix=")" suffixOverrides=",">
- <if test="userName!=null and userName!=''">
- user_name,
- </if>
- <if test="userPwd!=null and userPwd!=''">
- user_password,
- </if>
- <if test="userTel!=null and userTel!=''">
- user_tel,
- </if>
- <if test="userAge!=null and userAge!=''">
- user_age,
- </if>
- <if test="userSex!=null and userSex!=''">
- user_sex,
- </if>
- <if test="userBirthday!=null">
- user_birthday,
- </if>
- <if test="userEmail!=null and userEmail!=''">
- user_email,
- </if>
- </trim>
- values
- <trim prefix="(" suffix=")" suffixOverrides=",">
- <if test="userName!=null and userName!=''">
- #{userName},
- </if>
- <if test="userPwd!=null and userPwd!=''">
- #{userPwd},
- </if>
- <if test="userTel!=null and userTel!=''">
- #{userTel},
- </if>
- <if test="userAge!=null and userAge!=''">
- #{userAge},
- </if>
- <if test="userSex!=null and userSex!=''">
- #{userSex},
- </if>
- <if test="userBirthday!=null">
- #{userBirthday},
- </if>
- <if test="userEmail!=null and userEmail!=''">
- #{userEmail},
- </if>
- </trim>
- </insert>
- </mapper>


applicationContext.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop.xsd
- ">
- <!--开启注解扫描-->
- <context:component-scan base-package="com.hqyj.poison.*"/>
-
- <!--读取properties文件-->
- <context:property-placeholder location="classpath:properties/*.properties"/>
- <!-- 配置druid数据源 -->
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
- <property name="driverClassName" value="${jdbc.driverClassName}" />
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
- <!-- 最大并发连接数 -->
- <property name="maxActive" value="${maxActive}" />
- <!-- 初始化连接数量 -->
- <property name="initialSize" value="${initialSize}" />
- <!-- 最小空闲连接数 -->
- <property name="minIdle" value="${minIdle}" />
- <!-- 配置获取连接等待超时的时间 -->
- <property name="maxWait" value="${maxWait}" />
- </bean>
-
- <import resource="springMybatis.xml"></import>
- <import resource="springTransaction.xml"></import>
- <import resource="springShiro.xml"></import>
- </beans>

springmvc.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc.xsd">
-
- <!--开启包扫描-->
- <context:component-scan base-package="com.hqyj.poison.*"></context:component-scan>
- <!--开启mvc的注解驱动-->
- <mvc:annotation-driven></mvc:annotation-driven>
-
- <!--静态资源放行-->
- <mvc:resources mapping="/static/**" location="/static/"></mvc:resources>
-
- <!--配置mvc的视图解析器-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="../view/"></property>
- <property name="suffix" value=".jsp"></property>
- </bean>
- <!-- 开启shiro注解支持 -->
- <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
- <property name="securityManager" ref="securityManager" />
- </bean>
- <!-- 开启aop,对类代理 -->
- <aop:config proxy-target-class="true"/>
-
- </beans>

springMybatis.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop.xsd
- ">
-
- <!--配置sqlsessionFactory-->
- <bean class="org.mybatis.spring.SqlSessionFactoryBean">
- <!-- 数据源 -->
- <property name="dataSource" ref="dataSource"></property>
- <!--配置映射文件的路径-->
- <property name="mapperLocations" value="classpath:mapper/*.xml"/>
- <!--配置别名-->
- <property name="typeAliasesPackage" value="com.hqyj.poison.entity"></property>
- </bean>
-
- <!--
- 接口开发,扫描 com.hqyj.poison.dao包 ,写在此包下的接口即可被扫描到
- 通过sqlsessionFactory得到sqlSession
- sqlSession.getMapper(UserMapper.class);(帮我们做了,不用再单独配置)
- -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="com.hqyj.poison.mapper"/>
- </bean>
- </beans>

springShiro.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-4.3.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
- <!-- shiro相关配置 -->
-
- <!-- 配置自定义数据源myRealm -->
- <bean id="myRealm" class="com.hqyj.poison.realm.MyRealm">
- <!-- <!– 注入凭证匹配 –>-->
- <property name="credentialsMatcher" ref="credentialsMatcher"></property>
- </bean>
-
- <!-- 凭证匹配器 -->
- <bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
- <property name="hashAlgorithmName" value="md5" />
- <property name="hashIterations" value="1024" />
- </bean>
- <!-- 配置安全管理器 -->
- <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
- <property name="realm" ref="myRealm"></property>
- </bean>
-
- <!-- 配置authc,默认表单的用户名和密码必须是:username,password -->
- <!-- <bean id="authc" class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">-->
- <!-- <property name="usernameParam" value="userName"></property>-->
- <!-- <property name="passwordParam" value="userPassword"></property>-->
- <!-- </bean>-->
-
- <!-- 配置shiro过滤器 -->
- <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
- <property name="securityManager" ref="securityManager" />
- <!-- loginUrl认证提交地址,如果没有认证将会请求此地址进行认证,请求此地址将由formAuthenticationFilter进行表单认证 -->
- <property name="loginUrl" value="/sys/gologin" />
- <property name="successUrl" value="/sys/index"></property>
- <!-- 授权不通过(不具备相应权限) 走该地址-->
- <property name="unauthorizedUrl" value="/sys/error"></property>
-
- <!-- 过虑器链定义,从上向下顺序执行,一般将/**放在最下边 anon表示放行-->
- <property name="filterChainDefinitions">
- <value>
- /new=anon
- /sys/login=anon
- /sys/gologin=anon
- /sys/error=anon
- /sys/register=anon
- /sys/goregister=anon
- /sys/loginOut=logout
- /static/**=anon
- <!-- user表示身份认证通过或通过记住我认证通过的可以访问 -->
- <!-- /**=user-->
- <!-- 所有请求都要认证 -->
- /**=authc
- </value>
- </property>
- </bean>
-
- </beans>

springTransaction.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx.xsd">
- <!-- 配置事务管理器 -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <!-- 注入数据源 -->
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <!-- 配置通知 -->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <!-- 传播行为 -->
- <tx:method name="add*" propagation="REQUIRED" />
- <tx:method name="update*" propagation="REQUIRED"/>
- <tx:method name="remove*" propagation="REQUIRED"/>
- <tx:method name="query*" propagation="SUPPORTS" read-only="true"/>
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.hqyj.poison.service.*.*(..))"/>
- </aop:config>
- <!--在 Spring容器中注册事务注解驱动-->
- <!-- <tx:annotation-driven transaction-manager="transactionManager" />-->
- </beans>


每个方法对应到service中:
- package com.hqyj.poison.mapper;
-
- import com.hqyj.poison.entity.Order;
- import com.hqyj.poison.entity.Pwd;
- import com.hqyj.poison.entity.User;
- import com.hqyj.poison.query.QueryOrderBean;
- import com.hqyj.poison.query.QueryUserBean;
- import com.hqyj.poison.result.ResultInfo;
- import org.aspectj.weaver.ast.Or;
-
- import java.util.List;
-
- public interface UserMapper {
- User selectUser(String userName);
- User selectUserAndRole(String userName);
- User queryUsersByIdAndPwd(Pwd pwd);
- void registered(User user);
- List<User> selectUserByQueryBean(QueryUserBean queryUserBean);
- Integer selectCount(QueryUserBean queryUserBean);
- void updateUserPwdByName(Pwd pwd);
-
- void deleteUserById(Integer userId);
- void updateUser(User user);
-
- List<Order> selectOrderByQueryBean(QueryOrderBean queryOrderBean);
- Integer selectCountToOrder(QueryOrderBean queryOrderBean);
-
- void deleteOrderById(Integer orderId);
- void updateOrder(Order order);
- void insertOrder(Order order);
-
- Order selectOrderByNo(String orderNo);
- }


接口:
- package com.hqyj.poison.service;
-
- import com.hqyj.poison.entity.Order;
- import com.hqyj.poison.entity.Pwd;
- import com.hqyj.poison.entity.User;
- import com.hqyj.poison.query.QueryOrderBean;
- import com.hqyj.poison.query.QueryUserBean;
- import com.hqyj.poison.result.ResultInfo;
-
-
- public interface UserService {
- ResultInfo login(String userName, String userPwd);
- User queryUser(String userName);
- ResultInfo newUser(User user);
- User queryUserAndRole(String userName);
- ResultInfo selectUsers(QueryUserBean queryUserBean);
- User queryUsersByIdAndPwd(Pwd pwd);
- ResultInfo updateUserPwdByName(Pwd pwd);
-
- ResultInfo deleteUserById(Integer userId);
- ResultInfo updateUserById(User user);
-
- // 订单表
- ResultInfo selectOrders(QueryOrderBean queryOrderBean);
- ResultInfo deleteOrderById(Integer orderId);
- ResultInfo updateOrderById(Order order);
- ResultInfo insertOrder(Order order);
- Order queryOrders(String orderNo);
- }

实现类:
- package com.hqyj.poison.service.impl;
-
- import com.hqyj.poison.entity.Order;
- import com.hqyj.poison.entity.Pwd;
- import com.hqyj.poison.entity.User;
- import com.hqyj.poison.mapper.UserMapper;
- import com.hqyj.poison.query.QueryOrderBean;
- import com.hqyj.poison.query.QueryUserBean;
- import com.hqyj.poison.result.ResultInfo;
- import com.hqyj.poison.service.UserService;
- import org.apache.shiro.SecurityUtils;
- import org.apache.shiro.authc.UsernamePasswordToken;
- import org.apache.shiro.subject.Subject;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.List;
-
-
- @Service
- public class UserServiceImpl implements UserService {
- @Autowired
- private UserMapper userMapper;
- @Override
- public User queryUser(String userName) {
- return userMapper.selectUser(userName);
- }
-
- @Override
- public User queryUserAndRole(String userName) {
- return userMapper.selectUserAndRole(userName);
- }
- @Override
- public ResultInfo newUser(User user) {
- userMapper.registered(user);
- if (user!=null){
- return new ResultInfo("200","success");
- }return new ResultInfo("500","error");
- }
-
- @Override
- public ResultInfo login(String userName, String userPwd) {
- // 获取subject对象
- Subject subject = SecurityUtils.getSubject();
- // 将controller(页面)传递过来的userName和userPwd放入token令牌中
- UsernamePasswordToken token = new UsernamePasswordToken(userName,userPwd);
- try {
- // 登录认证
- subject.login(token);
- // 授权
- subject.checkRoles();
-
- return new ResultInfo("200","success");
- } catch (Exception e) {
- User user = (User) SecurityUtils.getSubject().getSession().getAttribute("u");
- if(user==null){
- return new ResultInfo("500","账号不存在!");
- }
- return new ResultInfo("500","密码错误!");
- }
- }
-
- @Override
- public ResultInfo selectUsers(QueryUserBean queryUserBean) {
- List<User> users = userMapper.selectUserByQueryBean(queryUserBean);
- Integer totals = userMapper.selectCount(queryUserBean);
- return new ResultInfo("success",totals,users);
-
- }
-
- @Override
- public User queryUsersByIdAndPwd(Pwd pwd) {
- return userMapper.queryUsersByIdAndPwd(pwd);
-
- }
-
- @Override
- public ResultInfo updateUserPwdByName(Pwd pwd) {
- userMapper.updateUserPwdByName(pwd);
- return new ResultInfo("200","success");
- }
-
- @Override
- public ResultInfo deleteUserById(Integer userId) {
- userMapper.deleteUserById(userId);
- return new ResultInfo("200","删除成功");
- }
-
- @Override
- public ResultInfo updateUserById(User user) {
- userMapper.updateUser(user);
- return new ResultInfo("200","success");
- }
-
- @Override
- public ResultInfo selectOrders(QueryOrderBean queryOrderBean) {
- List<Order> orders = userMapper.selectOrderByQueryBean(queryOrderBean);
- Integer totals = userMapper.selectCountToOrder(queryOrderBean);
- return new ResultInfo("success",totals,orders);
-
- }
-
- @Override
- public ResultInfo deleteOrderById(Integer orderId) {
- userMapper.deleteOrderById(orderId);
- return new ResultInfo("200","删除成功");
- }
-
- @Override
- public ResultInfo updateOrderById(Order order) {
- userMapper.updateOrder(order);
- return new ResultInfo("200","success");
- }
-
- @Override
- public ResultInfo insertOrder(Order order) {
- userMapper.insertOrder(order);
- return new ResultInfo("200","success");
- }
-
- @Override
- public Order queryOrders(String orderNo) {
- return userMapper.selectOrderByNo(orderNo);
- }
-
- }


login.jsp登录展示页面:
- <%--
- Created by IntelliJ IDEA.
- User: 86139
- Date: 2022/7/29
- Time: 10:09
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>登录</title>
- <!-- Google Font: Source Sans Pro -->
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
- <link rel="stylesheet" href="../static/plugins/fontawesome-free/css/all.min.css">
- <link rel="stylesheet" href="../static/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
- <link rel="stylesheet" href="../static/dist/css/adminlte.min.css">
- </head>
- <body class="hold-transition login-page">
- <div class="login-box">
- <!-- /.login-logo -->
- <div class="card">
- <div class="card-body login-card-body">
- <p class="login-box-msg">登录</p>
- <form>
- <div class="input-group mb-3">
- <input id="username" type="text" class="form-control" placeholder="用户名">
- <div class="input-group-append">
- <div class="input-group-text">
- <span class="fas fa-user-circle"></span>
- </div>
- </div>
- </div>
-
- <div class="input-group mb-3">
- <input id="userpwd" type="password" class="form-control" placeholder="密码">
- <div class="input-group-append">
- <div class="input-group-text">
- <span class="fas fa-lock"></span>
- </div>
- </div>
- </div>
- <div class="input-group mb-3">
- <span id="mess" style="color: red"></span>
- </div>
- <div class="row">
- <div class="col-8">
- <div class="icheck-primary">
- <input type="checkbox" id="remember">
- <label for="remember">
- Remember Me
- </label>
- </div>
- </div>
- <!-- /.col -->
- <div class="col-4">
- <button type="button" onclick="login()" class="btn btn-primary btn-block">登录</button>
- </div>
- <!-- /.col -->
- </div>
- </form>
-
-
- <!-- /.social-auth-links -->
- <button type="button" data-toggle='modal' data-target='#newUser' class="btn btn-primary">注册</button>
-
- <!-- /.login->card-body -->
- <div class="modal fade" id="newUser" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h4 class="modal-title" id="myModalLabel">用户新增</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body">
- <form class="form-horizontal">
- <div class="form-group">
- <label for="userName2" class="col-sm-2 control-label">用户名</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="userName2" placeholder="用户名">
- </div>
- </div>
- <div class="form-group">
- <label for="userPwd1" class="col-sm-2 control-label">密码</label>
- <div class="col-sm-10">
- <input type="password" class="form-control" id="userPwd1" placeholder="密码">
- </div>
- </div>
- <div class="form-group">
- <label for="userAge2" class="col-sm-2 control-label">年龄</label>
- <div class="col-sm-10">
- <input type="number" class="form-control" id="userAge2" placeholder="年龄">
- </div>
- </div>
- <div class="form-group">
- <label class="col-sm-2 control-label">性别</label>
- <div class="col-sm-10">
- <label class="radio-inline">
- <input type="radio" name="gender" id="sex1" value="男" > 男
- </label>
- <label class="radio-inline">
- <input type="radio" name="gender" id="sex2" value="女"> 女
- </label>
- </div>
- </div>
- <div class="form-group">
- <label for="userTel2" class="col-sm-2 control-label">电话</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="userTel2" placeholder="电话">
- </div>
- </div>
- <div class="form-group">
- <label for="userBirthday2" class="col-sm-2 control-label">日期</label>
- <div class="col-sm-10">
- <input type="date" class="form-control" id="userBirthday2" placeholder="日期">
- </div>
- </div>
- <div class="form-group">
- <label for="userEmail2" class="col-sm-2 control-label">邮箱</label>
- <div class="col-sm-10">
- <input type="email" class="form-control" id="userEmail2" placeholder="邮箱">
- </div>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
- <button type="button" onclick="newUser()" class="btn btn-primary">确认</button>
- </div>
- </div>
- </div>
- </div>
- <div class="modal fade" id="findpwd" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h4 class="modal-title" id="myModalLabe2">信息验证</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body">
- <form class="form-horizontal">
- <div class="form-group">
- <label for="userName3" class="col-sm-2 control-label">用户名</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="userName3" placeholder="用户名">
- </div>
- </div>
- <div class="form-group">
- <label for="userTel3" class="col-sm-2 control-label">电话</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="userTel3" placeholder="电话">
- </div>
- </div>
- <div class="form-group">
- <label for="userEmail3" class="col-sm-2 control-label">邮箱</label>
- <div class="col-sm-10">
- <input type="email" class="form-control" id="userEmail3" placeholder="邮箱">
- </div>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <!-- /.login-box -->
- <script src="../static/plugins/jquery/jquery.min.js"></script>
- <script src="../static/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
- <script src="../static/dist/js/adminlte.min.js"></script>
-
-
- <script>
- function login() {
- var username = $("#username").val();
- var userpwd = $("#userpwd").val();
- $.ajax({
- url:"../sys/login",
- type:"POST",
- dataType:"json",
- data:{"userName":username,"userPwd":userpwd},
- success:function (data) {
- if(data.status=="500"){
- $("#mess").html(data.message);
- }else {
-
- window.location.href="../view/index.jsp";
- }
- },
- error:function (e) {
- alert("服务器出错!")
- }
- });
- }
- function newUser() {
- //获取编辑模态框中的表单元素的值
- var username = $("#userName2").val();
- var userpwd = $("#userPwd1").val();
- var useremail = $("#userEmail2").val();
- var userage = $("#userAge2").val();
- var userbirthday = $("#userBirthday2").val();
- var usertel = $("#userTel2").val();
- var usersex = $("input[type='radio']:checked").val();
- var user = {
- "userName":username,
- "userPwd":userpwd,
- "userEmail":useremail,
- "userAge":userage,
- "userBirthday":userbirthday,
- "userTel":usertel,
- "userSex":usersex
- };
- $.ajax({
- url:"../new",
- type:"POST",
- data:user,
- dataType:"json",
- success:function (data) {
- alert(data.status)
- if(data.status=="200"){
- $('#newUser').modal('hide');
- GridManager.refreshGrid('demo-baseCode');
- }
- },
- error:function (e) {
- alert("添加失败");
- }
- });
- }
- </script>
- </body>
- </html>

index.jsp
- <%--
- Created by IntelliJ IDEA.
- User: 86139
- Date: 2022/8/10
- Time: 10:10
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>主页</title>
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
- <link rel="stylesheet" href="../static/plugins/fontawesome-free/css/all.min.css">
- <link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
- <link rel="stylesheet" href="../static/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css">
- <link rel="stylesheet" href="../static/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
- <link rel="stylesheet" href="../static/dist/css/adminlte.min.css">
- <link rel="stylesheet" href="../static/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
- <link rel="stylesheet" href="../static/plugins/daterangepicker/daterangepicker.css">
- <link rel="stylesheet" href="../static/plugins/summernote/summernote-bs4.min.css">
- </head>
- <body class="hold-transition sidebar-mini layout-fixed">
- <div class="wrapper">
-
- <!-- Navbar -->
- <nav class="main-header navbar navbar-expand navbar-white navbar-light">
- <!-- Left navbar links -->
- <ul class="navbar-nav">
- <li class="nav-item">
- <a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
- </li>
- <li class="nav-item d-none d-sm-inline-block">
- <a href="index3.html" class="nav-link">Home</a>
- </li>
- <li class="nav-item d-none d-sm-inline-block">
- <a href="#" class="nav-link">Contact</a>
- </li>
- </ul>
-
- <ul class="navbar-nav ml-auto">
- <!-- Notifications Dropdown Menu -->
- <li class="nav-item dropdown">
- <a class="nav-link" data-toggle="dropdown" href="#">
- <i class="nav-icon fas fa-user-circle"></i>
- Iron
- <i class="fas fa-angle-down right"></i>
- </a>
- <div class="dropdown-menu dropdown-menu-md dropdown-menu-right">
- <div class="dropdown-divider"></div>
- <a href="#" onclick="changePwd()" class="dropdown-item">
- <i class="fas fa-lock mr-2"></i>修改密码
- </a>
- <div class="dropdown-divider"></div>
- <a href="#" onclick="loginout()" class="dropdown-item">
- <i class="fas fa-sign-out-alt mr-2"></i>退出
- </a>
- </div>
- </li>
- </ul>
- </nav>
- <!-- /.navbar -->
-
- <!-- Main Sidebar Container -->
- <aside class="main-sidebar sidebar-dark-primary elevation-4">
- <!-- Brand Logo -->
- <a href="" class="brand-link">
- <img src="../static/dist/img/AdminLTELogo.png" alt="AdminLTE Logo" class="brand-image img-circle elevation-3" style="opacity: .8">
- <span class="brand-text font-weight-light">物流管理系统</span>
- </a>
-
-
- <!-- Sidebar -->
- <div class="sidebar">
- <!-- Sidebar user panel (optional) -->
- <div class="user-panel mt-3 pb-3 mb-3 d-flex">
- <div class="image">
- <img src="../static/dist/img/user2-160x160.jpg" class="img-circle elevation-2" alt="User Image">
- </div>
- <div class="info">
- <a href="#" class="d-block">Alexander Pierce</a>
- </div>
- </div>
-
-
- <!-- Sidebar Menu -->
- <nav class="mt-2">
- <ul id="sider" class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
- <!-- Add icons to the links using the .nav-icon class
- with font-awesome or any other icon font library -->
- <li class="nav-item">
- <a href="#" name="./home.jsp" class="nav-link active">
- <i class="nav-icon far fa-image"></i>
- <p>
- 首页
- </p>
- </a>
- </li>
- <li class="nav-item">
- <a href="#" class="nav-link">
- <i class="nav-icon fas fa-tachometer-alt"></i>
- <p>
- 用户管理
- <i class="right fas fa-angle-left"></i>
- </p>
- </a>
- <ul class="nav nav-treeview">
- <li class="nav-item">
- <a href="#" name="./user.jsp" class="nav-link">
- <i class="far fa-circle nav-icon"></i>
- <p>用户列表</p>
- </a>
- </li>
- </ul>
- </li>
-
- <li class="nav-item">
- <a href="#" class="nav-link">
- <i class="nav-icon fas fa-tachometer-alt"></i>
- <p>
- 物流管理
- <i class="right fas fa-angle-left"></i>
- </p>
- </a>
- <ul class="nav nav-treeview">
- <li class="nav-item">
- <a href="#" name="./logistics.jsp" class="nav-link">
- <i class="far fa-circle nav-icon"></i>
- <p>物流信息</p>
- </a>
- </li>
- </ul>
- </li>
- </ul>
- </nav>
- <!-- /.sidebar-menu -->
- </div>
- <!-- /.sidebar -->
- </aside>
- <div class="content-wrapper">
- <div class="content-header">
- <div class="container-fluid">
- <div class="row mb-2">
- <div class="col-sm-6">
- <h1 class="m-0">Dashboard</h1>
- </div><!-- /.col -->
- <div class="col-sm-6">
- <ol class="breadcrumb float-sm-right">
- <li class="breadcrumb-item"><a href="#">Home</a></li>
- <li class="breadcrumb-item active">Dashboard v1</li>
- </ol>
- </div><!-- /.col -->
- </div><!-- /.row -->
- </div><!-- /.container-fluid -->
- </div>
- <section class="content">
- <div class="container-fluid">
- <iframe id="ifr" src="./home.jsp" frameborder="0" scrolling="no" width="100%" height="100%">
-
- </iframe>
-
- </div>
- </section>
- <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h4 class="modal-title" id="myModalLabel1">修改密码</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body">
- <form class="form-horizontal">
- <input type="hidden" id="userId">
- <div class="form-group">
- <label for="UserName1" class="col-sm-2 control-label">用户名</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="UserName1" placeholder="用户名">
- </div>
- </div>
- <div class="form-group">
- <label for="UserPwd1" class="col-sm-2 control-label">原密码</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="UserPwd1" placeholder="原密码">
- </div>
- </div>
- <div class="form-group">
- <label for="UserPwd2" class="col-sm-2 control-label">新密码</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="UserPwd2" placeholder="新密码">
- </div>
- </div>
- <div class="form-group">
- <label for="UserPwd3" class="col-sm-2 control-label" style="max-width: 20%">确认密码</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="UserPwd3" placeholder="确认密码">
- </div>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal" onclick="clearall()">关闭</button>
- <button type="button" onclick="checkPwd()" class="btn btn-primary">确认</button>
- </div>
- </div>
- </div>
- </div>
- </div>
- <!-- jQuery -->
- <script src="../static/plugins/jquery/jquery.min.js"></script>
- <script src="../static/plugins/jquery-ui/jquery-ui.min.js"></script>
-
- <script>
- $.widget.bridge('uibutton', $.ui.button)
- </script>
-
- <script src="../static/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
- <script src="../static/plugins/jquery-knob/jquery.knob.min.js"></script>
- <script src="../static/plugins/moment/moment.min.js"></script>
- <script src="../static/plugins/daterangepicker/daterangepicker.js"></script>
- <script src="../static/plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js"></script>
- <script src="../static/plugins/summernote/summernote-bs4.min.js"></script>
- <script src="../static/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
- <script src="../static/dist/js/adminlte.js"></script>
- <script src="../static/dist/js/demo.js"></script>
- <%--<script src="../static/dist/js/pages/dashboard.js"></script>--%>
-
-
- <script>
- $(document).ready(function () {
- $("#sider a").click(function () {
- $("a").removeClass("active");
- var a = $(this).closest(".menu-open").attr("class")
- var s = $(this).parent("li").parent("ul").attr("class");
- if(!(typeof (s)=="undefined"||s.search("nav-treeview")==(-1))){
- $(this).parent("li").parent("ul").prev().addClass("active");
- $(this).addClass("active");
- var url = $(this).attr("name");
- $("#ifr").attr("src",url);
- }else {
- if(a != undefined){
- $(this).addClass("active");
- return;
- }else {
- $(".menu-open").children("a").trigger("click");
- $("a").removeClass("active");
- var url = $(this).attr("name");
- $("#ifr").attr("src",url);
- }
- $(this).addClass("active");
- }
- });
- });
-
- function loginout() {
- $.ajax({
- url:"../sys/loginOut",
- type:"GET",
- success:function (data) {
- window.location.href="../view/login.jsp";
- }
- })
- }
- function changePwd() {
- $("#myModal").modal('show');
- }
- function clearall() {
- $("#UserName1").val("");
- $("#UserPwd1").val("");
- $("#UserPwd2").val("");
- $("#UserPwd3").val("");
- }
- function checkPwd() {
- var username = $("#UserName1").val();
- var userpwd = $("#UserPwd1").val();
- var newPwd = $("#UserPwd2").val();
- var newPwd2 = $("#UserPwd3").val();
- if (newPwd != newPwd2){
- alert("两次密码不一致")
- }else {
- var user={"userName":username,"userPwd":userpwd,"newPwd":newPwd}
- $.ajax({
- url:"../user/change",
- type:"Get",
- data:user,
- dataType:"JSON",
- success:function (data) {
- alert(data.status)
- if (data.status == "200"){
- alert("修改成功")
-
- }else {
- alert(data.message)
- }
- $("#myModal").modal('hide');
- }
- })
- }
- }
- </script>
- </body>
- </html>

error.jsp
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- 权限不足,请联系管理员!
- </body>
- </html>
logistics.jsp
- <%--
- Created by IntelliJ IDEA.
- User: 86139
- Date: 2022/8/10
- Time: 10:45
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>用户列表</title>
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
- <link rel="stylesheet" href="../static/plugins/fontawesome-free/css/all.min.css">
- <link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
- <link rel="stylesheet" href="../static/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
- <link rel="stylesheet" href="../static/dist/css/adminlte.min.css">
- <link rel="stylesheet" href="../static/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
- <link rel="stylesheet" href="../static/plugins/daterangepicker/daterangepicker.css">
- <link rel="stylesheet" href="../static/plugins/summernote/summernote-bs4.min.css">
- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
- <link rel="stylesheet" href="../static/gridmanager/css/gm.css">
- <script src="../static/gridmanager/js/gm.js"></script>
- </head>
- <body>
- <div class="row">
- <div class="col-12">
- <div class="card">
- <div class="card-header row">
-
- <div class="col-11">
-
- <form class="form-inline">
- <input type="text" class="form-control" id="orderTel" placeholder="收货号码">
- <button type="button" class="btn btn-default" onclick="searchOrders()">搜索</button>
-
-
-
- <button type="button" data-toggle='modal' data-target='#myModal1' class="btn btn-primary" id="insert">添加</button>
- </form>
- </div>
- </div>
-
- <!-- /.card-header -->
- <div class="card-body">
- <table id='table-demo-ajaxPageCode'></table>
- </div>
- <!-- /.card-body -->
- </div>
- </div>
- <!-- /.col -->
- </div>
-
- <%--用户修改--%>
- <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h4 class="modal-title" id="myModalLabel1">修改</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body">
- <form class="form-horizontal">
- <input type="hidden" id="orderId">
- <div class="form-group">
- <label for="orderPeople1" class="col-sm-2 control-label">收件人</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="orderPeople1" placeholder="收件人">
- </div>
- </div>
- <div class="form-group">
- <label for="orderTel1" class="col-sm-2 control-label">电话</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="orderTel1" placeholder="电话">
- </div>
- </div>
- <div class="form-group">
- <label for="orderFreight1" class="col-sm-2 control-label">运费</label>
- <div class="col-sm-10">
- <input type="number" class="form-control" id="orderFreight1" placeholder="运费">
- </div>
- </div>
- <div class="form-group">
- <label for="orderTime1" class="col-sm-2 control-label">日期</label>
- <div class="col-sm-10">
- <input type="date" class="form-control" id="orderTime1" placeholder="下单时间">
- </div>
- </div>
- <div class="form-group">
- <label for="giveMethod1" class="col-sm-2 control-label">物流</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="giveMethod1" placeholder="配送方式">
- </div>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
- <button type="button" onclick="updateOrders()" class="btn btn-primary">确认</button>
- </div>
- </div>
- </div>
- </div>
-
- <%--用户添加--%>
- <div class="modal fade" id="myModal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h4 class="modal-title" id="myModalLabel1">添加</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body">
- <form class="form-horizontal">
- <input type="hidden" id="orderId2">
- <div class="form-group">
- <label for="orderNo2" class="col-sm-2 control-label">编号</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="orderNo2" placeholder="订单编号">
- </div>
- </div>
- <div class="form-group">
- <label for="orderPeople2" class="col-sm-2 control-label">收件人</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="orderPeople2" placeholder="收件人">
- </div>
- </div>
- <div class="form-group">
- <label for="orderTel2" class="col-sm-2 control-label">电话</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="orderTel2" placeholder="电话">
- </div>
- </div>
- <div class="form-group">
- <label for="orderFreight2" class="col-sm-2 control-label">运费</label>
- <div class="col-sm-10">
- <input type="number" class="form-control" id="orderFreight2" placeholder="运费">
- </div>
- </div>
- <div class="form-group">
- <label for="orderTime2" class="col-sm-2 control-label">日期</label>
- <div class="col-sm-10">
- <input type="date" class="form-control" id="orderTime2" placeholder="下单时间">
- </div>
- </div>
- <div class="form-group">
- <label for="giveMethod2" class="col-sm-2 control-label">物流</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="giveMethod2" placeholder="配送方式">
- </div>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal" onclick="clearall()">关闭</button>
- <button type="button" onclick="insertOrders()" class="btn btn-primary">确认</button>
- </div>
- </div>
- </div>
- </div>
- <!-- /.row -->
- <!-- jQuery -->
- <script src="../static/plugins/jquery/jquery.min.js"></script>
- <script src="../static/plugins/jquery-ui/jquery-ui.min.js"></script>
- <script src="../static/jqPaginator.js"></script>
- <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
- <script src="../static/plugins/jquery-knob/jquery.knob.min.js"></script>
- <script src="../static/plugins/moment/moment.min.js"></script>
- <script src="../static/plugins/daterangepicker/daterangepicker.js"></script>
- <script src="../static/plugins/summernote/summernote-bs4.min.js"></script>
- <script src="../static/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
- <script src="../static/dist/js/adminlte.js"></script>
-
-
- <script>
- var respData;
- var cPage = null;
- var pSize = null;
- var ordertel = null;
- $(function () {
- // queryUsers();
- document.querySelector('#table-demo-ajaxPageCode').GM({
- gridManagerName: 'demo-baseCode',
- ajaxData: function (setting,params) {
- cPage = params.currentPage;
- pSize = params.pageSize;
- queryOrders(cPage,pSize,ordertel);
- return respData;
- },
- supportAjaxPage: true,
- sizeData: [4,8,12,16],
- pageSize: 4,
- currentPageKey: "currentPage",
- pageSizeKey: "pageSize",
- // ajaxType: 'POST',
- columnData: [
- {
- key: 'orderNo',
- text: '订单编号'
- },{
- key: 'orderPeople',
- text: '收货人'
- },{
- key: 'orderFreight',
- text: '运费'
- },{
- key: 'giveMethod',
- text: '配送方式'
- },{
- key: 'orderTime',
- text: '下单时间'
- },{
- key: 'orderTel',
- text: '电话'
- },{
- key: 'orderId',
- text: '操作',
- alien:'center',
- template:function (cell,row,index,key) {
- return "<button type='button' data-obj='"+JSON.stringify(row) +
- "' class= 'btn btn-success btn-sm'>编辑</button> " +
- "<button type='button' class= 'btn btn-success btn-sm' data-id='"+ cell +"'>删除</button>";
- }
- }
- ]
- });
-
- });
-
- function queryOrders(cPage,pSize,ordertel) {
- $.ajax({
- url:"../order/orderAll",
- type:"GET",
- dataType:"json",
- async:false,
- data:{"currentPage":cPage,"pageSize":pSize,"orderTel":ordertel},
- success:function (data) {
- if(data.status=="500"){
- window.location.href="../sys/error";
- }else
-
- respData = {"data":data.data,"totals":data.totals};
- }
- });
- }
-
- function searchOrders() {
- cPage = 1;
- pSize = 2;
- ordertel = $("#orderTel").val();
-
- GridManager.setQuery("demo-baseCode");
- }
-
- $("#table-demo-ajaxPageCode").on("click","button[data-id]",function () {
- var isDel = confirm("确认是否删除");
- if (isDel){
- var id = $(this).data("id");
- $.ajax({
- url:"../order/"+id,
- type: "delete",
- dataType: "json",
- success:function (data) {
- if (data.status=="200"){
- GridManager.refreshGrid('demo-baseCode');
- }else
- {
- alert("权限不足,请联系管理员");
- }
- },error:function (e) {
- alert("删除失败")
- }
- })
- }
-
- })
-
-
- $("#table-demo-ajaxPageCode").on("click","button[data-obj]",function () {
-
- // 数据回显
- var orders = $(this).data("obj");
- $("#orderId").val(orders.orderId);
- $("#orderPeople1").val(orders.orderPeople);
- $("#orderFreight1").val(orders.orderFreight);
- $("#giveMethod1").val(orders.giveMethod);
- $("#orderTime1").val(orders.orderTime);
- $("#orderTel1").val(orders.orderTel);
-
- // 显示模态版
- $("#myModal").modal('show');
- })
-
- function updateOrders() {
- var id = $("#orderId").val();
- var name = $("#orderPeople1").val();
- var freight = $("#orderFreight1").val();
- var method = $("#giveMethod1").val();
- var time = $("#orderTime1").val();
- var tel = $("#orderTel1").val();
- var orders = {
- "orderId":id,
- "orderPeople":name,
- "orderFreight":freight,
- "giveMethod":method,
- "orderTime":time,
- "orderTel":tel
- };
- $.ajax({
- url:"../order/",
- type:"put",
- contentType:"application/json",
- dataType:"json",
- data:JSON.stringify(orders),
- success:function (data) {
- if (data.status=="200"){
- $("#myModal").modal('hide');
- GridManager.refreshGrid('demo-baseCode');
- console.log(id)
- }else {
- alert("权限不足,无法修改")
- }
- }
- })
- }
-
- $("#insert").click(function () {
- $("#myModal2").modal('show');
- })
-
- function insertOrders() {
- var no = $("#orderNo2").val();
- var name = $("#orderPeople2").val();
- var freight = $("#orderFreight2").val();
- var method = $("#giveMethod2").val();
- var time = $("#orderTime2").val();
- var tel = $("#orderTel2").val();
- var orders = {
- "orderNo":no,
- "orderPeople":name,
- "orderFreight":freight,
- "giveMethod":method,
- "orderTime":time,
- "orderTel":tel
- };
- $.ajax({
- url:"../order/insert",
- type:"put",
- contentType:"application/json",
- dataType:"json",
- data:JSON.stringify(orders),
- success:function (data) {
- if (data.status=="200"){
- alert("添加成功")
- }else if (data.status=="500"){
- alert(data.message)
- }else
- alert("权限不足")
- $("#myModal2").modal('hide');
- GridManager.refreshGrid('demo-baseCode');
-
- }
- })
- }
- function clearall() {
- $("#orderNo2").val("");
- $("#orderPeople2").val("");
- $("#orderFreight2").val("");
- $("#giveMethod2").val("");
- $("#orderTime2").val("");
- $("#orderTel2").val("");
- }
- </script>
- </body>
- </html>

user.jsp
- <%--
- Created by IntelliJ IDEA.
- User: 86139
- Date: 2022/8/10
- Time: 10:45
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>用户列表</title>
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
- <link rel="stylesheet" href="../static/plugins/fontawesome-free/css/all.min.css">
- <link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
- <link rel="stylesheet" href="../static/plugins/icheck-bootstrap/icheck-bootstrap.min.css">
- <link rel="stylesheet" href="../static/dist/css/adminlte.min.css">
- <link rel="stylesheet" href="../static/plugins/overlayScrollbars/css/OverlayScrollbars.min.css">
- <link rel="stylesheet" href="../static/plugins/daterangepicker/daterangepicker.css">
- <link rel="stylesheet" href="../static/plugins/summernote/summernote-bs4.min.css">
- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
- <link rel="stylesheet" href="../static/gridmanager/css/gm.css">
- <script src="../static/gridmanager/js/gm.js"></script>
- </head>
- <body>
- <div class="row">
- <div class="col-12">
- <div class="card">
- <div class="card-header row">
-
- <div class="col-11">
-
- <form class="form-inline">
- <label for="username">用户名</label>
- <input type="text" class="form-control" id="username" placeholder="用户名">
-
- <label for="usertel">电话</label>
- <input type="tel" class="form-control" id="usertel" placeholder="电话">
- <button type="button" class="btn btn-default" onclick="searchUser()">搜索</button>
-
- </form>
- </div>
- </div>
-
- <!-- /.card-header -->
- <div class="card-body">
- <table id='table-demo-ajaxPageCode'></table>
- </div>
- <!-- /.card-body -->
- </div>
- </div>
- <!-- /.col -->
- </div>
-
- <%--用户修改--%>
- <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h4 class="modal-title" id="myModalLabel1">用户修改</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body">
- <form class="form-horizontal">
- <input type="hidden" id="userId">
- <div class="form-group">
- <label for="UserName1" class="col-sm-2 control-label">用户名</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="UserName1" placeholder="用户名">
- </div>
- </div>
- <div class="form-group">
- <label for="UserAge1" class="col-sm-2 control-label">年龄</label>
- <div class="col-sm-10">
- <input type="number" class="form-control" id="UserAge1" placeholder="年龄">
- </div>
- </div>
- <div class="form-group">
- <label class="col-sm-2 control-label">性别</label>
- <div class="col-sm-10">
- <label class="radio-inline">
- <input type="radio" name="gender" id="inlineRadio11" value="男"> 男
- </label>
- <label class="radio-inline">
- <input type="radio" name="gender" id="inlineRadio21" value="女"> 女
- </label>
- </div>
- </div>
- <div class="form-group">
- <label for="UserTel1" class="col-sm-2 control-label">电话</label>
- <div class="col-sm-10">
- <input type="text" class="form-control" id="UserTel1" placeholder="电话">
- </div>
- </div>
- <div class="form-group">
- <label for="UserBir1" class="col-sm-2 control-label">日期</label>
- <div class="col-sm-10">
- <input type="date" class="form-control" id="UserBir1" placeholder="日期">
- </div>
- </div>
- <div class="form-group">
- <label for="UserEmail1" class="col-sm-2 control-label">邮箱</label>
- <div class="col-sm-10">
- <input type="email" class="form-control" id="UserEmail1" placeholder="邮箱">
- </div>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
- <button type="button" onclick="updateUser()" class="btn btn-primary">确认</button>
- </div>
- </div>
- </div>
- </div>
- <!-- /.row -->
- <!-- jQuery -->
- <script src="../static/plugins/jquery/jquery.min.js"></script>
- <script src="../static/plugins/jquery-ui/jquery-ui.min.js"></script>
- <script src="../static/jqPaginator.js"></script>
- <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
- <script src="../static/plugins/jquery-knob/jquery.knob.min.js"></script>
- <script src="../static/plugins/moment/moment.min.js"></script>
- <script src="../static/plugins/daterangepicker/daterangepicker.js"></script>
- <script src="../static/plugins/summernote/summernote-bs4.min.js"></script>
- <script src="../static/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js"></script>
- <script src="../static/dist/js/adminlte.js"></script>
-
- <script>
- var respData;
- var cPage = null;
- var pSize = null;
- var username = null;
- var usertel = null;
- $(function () {
- // queryUsers();
- document.querySelector('#table-demo-ajaxPageCode').GM({
- gridManagerName: 'demo-baseCode',
- ajaxData: function (setting,params) {
- cPage = params.currentPage;
- pSize = params.pageSize;
- queryUsers(cPage,pSize,username,usertel);
- return respData;
- },
- supportAjaxPage: true,
- sizeData: [5,10,15,20],
- pageSize: 5,
- currentPageKey: "currentPage",
- pageSizeKey: "pageSize",
- // ajaxType: 'POST',
- columnData: [
- {
- key: 'userName',
- text: '用户名'
- },{
- key: 'userSex',
- text: '性别'
- },{
- key: 'userAge',
- text: '年龄'
- },{
- key: 'userTel',
- text: '电话'
- },{
- key: 'userBirthday',
- text: '日期'
- },{
- key: 'userEmail',
- text: '邮箱'
- },{
- key: 'userId',
- text: '操作',
- alien:'center',
- template:function (cell,row,index,key) {
- return "<button type='button' data-obj='"+JSON.stringify(row) +
- "' class= 'btn btn-success btn-sm'>编辑</button> " +
- "<button type='button' class= 'btn btn-success btn-sm' data-id='"+ cell +"'>删除</button>";
- }
- }
- ]
- });
-
- });
-
- function queryUsers(cPage,pSize,username,usertel) {
- $.ajax({
- url:"../user/all",
- type:"GET",
- dataType:"json",
- async:false,
- data:{"currentPage":cPage,"pageSize":pSize,"userName":username,"userTel":usertel},
- success:function (data) {
- if(data.status=="500"){
- window.location.href="../sys/error";
- }else
- respData = {"data":data.data,"totals":data.totals};
- }
- });
- }
-
- $("#table-demo-ajaxPageCode").on("click","button[data-id]",function () {
- var isDel = confirm("确认是否删除");
- if (isDel){
- var id = $(this).data("id");
- $.ajax({
- url:"../user/"+id,
- type: "delete",
- dataType: "json",
- success:function (data) {
- if (data.status=="200"){
- GridManager.refreshGrid('demo-baseCode');
- }else
- {
- alert("权限不足,请联系管理员");
- }
- },error:function (e) {
- alert("删除失败")
- }
- })
- }
-
- })
- $("#table-demo-ajaxPageCode").on("click","button[data-obj]",function () {
-
- // 数据回显
- var user = $(this).data("obj");
- $("#userId").val(user.userId);
- $("#UserName1").val(user.userName);
- $("#UserAge1").val(user.userAge);
- $("#UserTel1").val(user.userTel);
- $("#UserEmail1").val(user.userEmail);
- $("#UserBir1").val(user.userBirthday);
- var sex = user.userSex;
- if (sex=="男"){
- $("#inlineRadio11").prop("checked",true);
- }else if (sex =="女"){
- $("#inlineRadio21").prop("checked",true);
- }
-
- // 显示模态版
- $("#myModal").modal('show');
- })
-
- function updateUser() {
- var id = $("#userId").val();
- var name = $("#UserName1").val();
-
- var age = $("#UserAge1").val();
- var tel = $("#UserTel1").val();
- var email = $("#UserEmail1").val();
- var bir = $("#UserBir1").val();
- var sex = $("input[type='radio']:checked").val();
- var users = {
- "userId":id,
- "userName":name,
- "userAge":age,
- "userTel":tel,
- "userEmail":email,
- "userBirthday":bir,
- "userSex":sex,
- };
- $.ajax({
- url:"../user/",
- type:"put",
- contentType:"application/json",
- dataType:"json",
- data:JSON.stringify(users),
- success:function (data) {
- if (data.status=="200"){
- $("#myModal").modal('hide');
- GridManager.refreshGrid('demo-baseCode');
- console.log(id)
- }
- }
- })
- }
- function searchUser() {
- cPage = 1;
- pSize = 2;
- username = $("#username").val();
- usertel = $("#usertel").val();
- GridManager.setQuery("demo-baseCode");
- }
- </script>
-
- </body>
- </html>

usercontroller
- package com.hqyj.poison.controller;
-
-
- import com.hqyj.poison.entity.Pwd;
- import com.hqyj.poison.entity.User;
- import com.hqyj.poison.query.QueryOrderBean;
- import com.hqyj.poison.query.QueryUserBean;
- import com.hqyj.poison.result.ResultInfo;
- import com.hqyj.poison.service.UserService;
- import com.hqyj.poison.utils.MD5Util;
- import org.apache.ibatis.annotations.Param;
- import org.apache.shiro.authz.annotation.Logical;
- import org.apache.shiro.authz.annotation.RequiresRoles;
- import org.apache.shiro.crypto.hash.SimpleHash;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.*;
-
- @Controller
- @RequestMapping("/user")
- public class UserController {
- @Autowired
- private UserService userService;
-
- @RequiresRoles(value = {"admin"})
- //角色权限限制
- @RequestMapping("/all")
- @ResponseBody
- public ResultInfo queryUsers(QueryUserBean queryUserBean){
- return userService.selectUsers(queryUserBean);
- }
-
- @RequiresRoles(value = {"admin","user"},logical = Logical.OR)
- //or代表二选一皆可;and代表同时满足
- @RequestMapping("/change")
- @ResponseBody
- public ResultInfo queryUsersByIdAndPwd(Pwd pwd){
- System.out.println(pwd.getUserName());
- System.out.println(pwd.getUserPwd());
- System.out.println(pwd.getNewPwd());
- String password = new SimpleHash("MD5",pwd.getUserPwd(),pwd.getUserName(),1024).toString();
- pwd.setUserPwd(password);
- User users = userService.queryUsersByIdAndPwd(pwd);
-
- if (users!=null){
- String md5 = MD5Util.getPasswordByMD5(pwd.getNewPwd(),pwd.getUserName());
- System.out.println(md5);
- pwd.setUserPwd(md5);
- return userService.updateUserPwdByName(pwd);
- }
- return new ResultInfo("500","密码错误");
- }
-
- @RequiresRoles(value = {"admin"})
- @DeleteMapping("/{id}")
- @ResponseBody
- public ResultInfo deleteUsers(@PathVariable("id") Integer userId){
- return userService.deleteUserById(userId);
- }
-
- @RequiresRoles(value = {"admin"})
- @PutMapping("/")
- @ResponseBody
- public ResultInfo updateUser(@RequestBody User user){
- return userService.updateUserById(user);
- }
-
- }

newUsercontroller
- package com.hqyj.poison.controller;
-
- import com.hqyj.poison.entity.User;
- import com.hqyj.poison.result.ResultInfo;
- import com.hqyj.poison.service.UserService;
- import com.hqyj.poison.utils.MD5Util;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
-
-
- @Controller
- @RequestMapping("/new")
- public class newUserController {
- @Autowired
- private UserService userService;
- @PostMapping
- @ResponseBody
- public ResultInfo newUser(User user){
- //注册密码加密
- String md5 = MD5Util.getPasswordByMD5(user.getUserPwd(), user.getUserName());
- user.setUserPwd(md5);
- return userService.newUser(user);
- }
- }

ExceptionController(处理异常的cotroller)
- package com.hqyj.poison.controller;
-
- import com.hqyj.poison.result.ResultInfo;
- import org.apache.shiro.authz.AuthorizationException;
- import org.springframework.core.Ordered;
- import org.springframework.core.annotation.Order;
- import org.springframework.web.bind.annotation.ControllerAdvice;
- import org.springframework.web.bind.annotation.ExceptionHandler;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- import javax.servlet.http.HttpServletRequest;
-
- @ControllerAdvice
- public class ExceptionController {
- /**
- * 集中处理 controller 层 AuthorizationException 异常
- */
- @ExceptionHandler(value= {AuthorizationException.class})
- @Order(Ordered.HIGHEST_PRECEDENCE)
- @ResponseBody
- public ResultInfo handlerAccessDeniedException(HttpServletRequest request,
- AuthorizationException exception){
- return new ResultInfo("500", "noPermission");
- }
-
- }

SystemCotroller
- package com.hqyj.poison.controller;
-
- import com.hqyj.poison.entity.User;
- import com.hqyj.poison.result.ResultInfo;
- import com.hqyj.poison.service.UserService;
- import org.apache.shiro.SecurityUtils;
- import org.apache.shiro.authz.annotation.RequiresAuthentication;
- import org.apache.shiro.subject.Subject;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
-
- @Controller
- @RequestMapping("/sys")
- public class SystemController {
- @Autowired
- private UserService userService;
- @PostMapping("/login")
- @ResponseBody
- public ResultInfo login(String userName, String userPwd){
- return userService.login(userName,userPwd);
- }
-
- @RequiresAuthentication
- @GetMapping("/loginOut")
- public ResultInfo logout() {
- //在这里执行退出系统前需要清空的数据
- Subject subject = SecurityUtils.getSubject();
- if(subject.isAuthenticated()) {
- subject.logout();
- }
- System.out.println("退出登录成功");
- return new ResultInfo("200","success");
- }
- }

odercontroller
- package com.hqyj.poison.controller;
-
-
- import com.hqyj.poison.entity.Order;
- import com.hqyj.poison.entity.User;
- import com.hqyj.poison.query.QueryOrderBean;
- import com.hqyj.poison.result.ResultInfo;
- import com.hqyj.poison.service.UserService;
- import org.apache.shiro.authz.annotation.Logical;
- import org.apache.shiro.authz.annotation.RequiresRoles;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.*;
-
- @Controller
- @RequestMapping("/order")
- public class OrderController {
- @Autowired
- private UserService userService;
-
- @RequiresRoles(value = {"admin","user"},logical = Logical.OR)
- @RequestMapping("/orderAll")
- @ResponseBody
- public ResultInfo queryOrder(QueryOrderBean queryOrderBean){
- return userService.selectOrders(queryOrderBean);
- }
-
- @RequiresRoles(value = {"admin"})
- @DeleteMapping("/{id}")
- @ResponseBody
- public ResultInfo deleteOrder(@PathVariable("id") Integer orderId){
- return userService.deleteOrderById(orderId);
- }
-
- @RequiresRoles(value = {"admin"})
- @PutMapping("/")
- @ResponseBody
- public ResultInfo updateOrder(@RequestBody Order order){
- return userService.updateOrderById(order);
- }
-
- @RequiresRoles(value = {"admin"})
- @PutMapping("/insert")
- @ResponseBody
- public ResultInfo insertOrder(@RequestBody Order order){
- String orderNo = order.getOrderNo();
- Order orders = userService.queryOrders(orderNo);
- if (orders==null){
- return userService.insertOrder(order);
- }
- else
- return new ResultInfo("500","该订单已存在");
- }
-
-
- }

pageController
- package com.hqyj.poison.controller;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- @Controller
- @RequestMapping("/sys")
- public class PageController {
- @RequestMapping("/gologin")
- public String goLogin(){
- return "login";
- }
- @RequestMapping("/index")
- public String goIndex(){
- return "index";
- }
- @RequestMapping("/error")
- public String doError(){
- return "error";
- }
- }

Myrealm
- package com.hqyj.poison.realm;
-
- import com.hqyj.poison.entity.Role;
- import com.hqyj.poison.entity.User;
- import com.hqyj.poison.service.UserService;
- import org.apache.shiro.SecurityUtils;
- import org.apache.shiro.authc.AuthenticationException;
- import org.apache.shiro.authc.AuthenticationInfo;
- import org.apache.shiro.authc.AuthenticationToken;
- import org.apache.shiro.authc.SimpleAuthenticationInfo;
- import org.apache.shiro.authz.AuthorizationInfo;
- import org.apache.shiro.authz.SimpleAuthorizationInfo;
- import org.apache.shiro.realm.AuthorizingRealm;
- import org.apache.shiro.subject.PrincipalCollection;
- import org.apache.shiro.util.ByteSource;
- import org.springframework.beans.factory.annotation.Autowired;
-
- import java.util.HashSet;
- import java.util.List;
- import java.util.Set;
-
- public class MyRealm extends AuthorizingRealm {
-
- @Autowired
- private UserService userService;
-
- @Override
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
- SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
- // 获取用户名
- String userName = (String) principalCollection.getPrimaryPrincipal();
- // 根据用户名查询所对应的角色
- User user = userService.queryUserAndRole(userName);
- // 用来存放角色名称的集合
- Set<String> roleNames = new HashSet<>();
- // 当前用户对应的角色
- List<Role> roles = user.getRoleList();
- for (Role role : roles) {
- //将用户名所对应的的角色名称放入集合中
- roleNames.add(role.getRoleName());
- }
- simpleAuthorizationInfo.addRoles(roleNames);
-
- return simpleAuthorizationInfo;
- }
-
- @Override
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
- String userName = (String) authenticationToken.getPrincipal();
- User user = userService.queryUser(userName);
- // 将查询出来的用户存放到shiro提供的session中
- SecurityUtils.getSubject().getSession().setAttribute("u",user);
- // 该用户不存在
- if(user==null){
- return null;
- }
- // 获取盐
- ByteSource salt = ByteSource.Util.bytes(userName);
- // 返回认证信息由父类AuthenticatingRealm进行认证
- // getName() :父类的一个方法,获取当前数据源的名称(MyRealm)
- SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(userName,user.getUserPwd(),salt,getName());
- return simpleAuthenticationInfo;
- }
- }

工具类:Util中
MD5Util
- package com.hqyj.poison.utils;
-
- import org.apache.shiro.crypto.hash.SimpleHash;
-
- public class MD5Util {
- private String userPassword;
- private String userName;
-
- public static String getPasswordByMD5(String password,String salt){
- String simpleHash = new SimpleHash("MD5",password,salt,1024).toString();
- return simpleHash;
- }
- }
这个部分相对而言比较难,因此,我个人觉得可以不实现,直接使用表单返回查询和显示的数据也是可以的。(此处运用了gridmanaer:GridManager - Demo (lovejavascript.com))

QueryOrderBean:
- package com.hqyj.poison.query;
-
-
- import lombok.Data;
-
- @Data
- public class QueryOrderBean {
- private Integer currentPage;
- private Integer pageSize;
- private String orderName;
- private String orderTel;
-
-
- private Integer startIndex;
-
-
- public Integer getStartIndex() {
- return this.startIndex = (this.currentPage-1)*this.pageSize; }
-
- }

QueryUserBean:
- package com.hqyj.poison.query;
-
-
- import lombok.Data;
-
- @Data
- public class QueryUserBean {
- // 当前页码
- private Integer currentPage;
- // 每页展示的条数
- private Integer pageSize;
- // 搜索条件
- private String userName;
- private String userTel;
-
-
- private Integer startIndex;
-
-
- public Integer getStartIndex() {
- return this.startIndex = (this.currentPage-1)*this.pageSize; }
-
- }

Resultlnfo:
- package com.hqyj.poison.result;
-
- import com.hqyj.poison.entity.User;
- import lombok.Data;
-
- import java.util.List;
-
- @Data
- public class ResultInfo {
- private String status;
- private Integer totals;
- private String message;
- private Object data;
-
- //返回出错
- public ResultInfo(String status, String message) {
- this.status = status;
- this.message = message;
- }
- //返回grid渲染表格的数据
- public ResultInfo(String status, Integer totals, Object data) {
- this.status = status;
- this.totals = totals;
- this.data = data;
- }
- //返回不需要分页的数据
- public ResultInfo(String status, String message, Object data) {
- this.status = status;
- this.message = message;
- this.data = data;
- }
-
-
- }

结果:

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。