前言
开发工具:IntelliJ IDEA 2019.3.1
本文用到的技术:layui+ajax+SSM(Spring+SpringMVC+MyBatis)+mysql+tomcat
编写语言为:Java
由于本位篇幅过长,我这里提供两种下载地址。
码云仓库(gitee):https://gitee.com/fishme9/logistics_system.git
百度网盘:https://pan.baidu.com/s/1fgMG89ZpohAVRgk1fHeOPQ?pwd=58e2
提取码:58e2
MySQL文件:
百度网盘:https://pan.baidu.com/s/1SIOKTboJe4MWV6z15mFL0A?pwd=0ymg
提取码:0ymg
提示:以下是本篇文章正文内容,下面案例可供参考
一、项目结构
1.文件结构
这里有些文件没有显示,具体的目录下面有哪些文件显示,会在下面的具体实现中,展现出来。
2.部分显示效果图
用户列表
订单管理
管理员列表
文件上传下载
登录个人信息及密码修改
二、项目配置文件
pom.xml
maven依赖包
<?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.psl</groupId>
<artifactId>ssmjavaweb</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<packaging>war</packaging>
<dependencies>
<!--dao依赖-->
<!--mybatis相关-->
<!--1. mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!--2.mybatis整合spring-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
<!--3.mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--4.lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!--5.log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--6.junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!--7.spring相关-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.19</version>
</dependency>
<!--spring-test-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.19</version>
</dependency>
<!--spring-jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.19</version>
</dependency>
<!--spring-tx-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.19</version>
</dependency>
<!--service层-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>
<!--Druid-->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
<!--c3p0连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!--添加servlet的支持-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!--json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.2</version>
</dependency>
<!--pagehelper 分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.1</version>
</dependency>
<!-- pagehelper的依赖包:jsqlparser -->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>4.5</version>
</dependency>
<!--文档上传下载依赖包-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<!--shiro依赖相关-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.2.2</version>
</dependency>
<!--spring整合shiro的包-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
</project>
resouerces
mapper文件
AdminMapper.xml
<?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 namespace="com.hqyj.psl.mapper.AdminMapper">
<resultMap id="adminMap" type="Admin">
<id property="adminId" column="id"/>
<result property="sex" column="sex"/>
<result property="name" column="name"/>
<result property="phone" column="phone"/>
<result property="email" column="email"/>
<result property="remark" column="remark"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
</resultMap>
<select id="selectByName" resultMap="adminMap">
select * from admin where name=#{username}
</select>
<!--通过名字查询角色-->
<select id="selectRolesByUsername" resultType="java.lang.String">
SELECT r.name FROM admin_role ar
left join admin a on a.admin_id=ar.admin_id
left join role r on r.role_id=ar.role_id
where a.name = #{name};
</select>
<!--通过名字查询权限-->
<select id="selectPermsByUsername" resultType="java.lang.String">
select p.url from role_permission rp
left join role r on r.role_id=rp.role_id
left join permission p on p.permission_id=rp.permission_id
where rp.role_id in
(SELECT r.role_id FROM admin_role ar
left join admin a on a.admin_id=ar.admin_id
left join role r on r.role_id=ar.role_id
where a.name = #{name})
</select>
<!--注册-->
<insert id="insertBySignup">
insert into admin (admin_id,name,username,password) values (null,#{arg0},"simple",#{arg1})
</insert>
<!--个人信息更新-->
<update id="update">
update admin set phone=#{phone},email=#{email},password=#{password},remark=#{remark} where name=#{name}
</update>
<!--个人资料查询-->
<select id="show" resultMap="adminMap">
select * from admin where name=#{username} and password=#{password}
</select>
</mapper>
MyFileMapper.xml
<?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 namespace="com.hqyj.psl.mapper.MyFileMapper">
<resultMap id="myFileMap" type="MyFile">
<id property="fileId" column="file_id"/>
<result property="fileName" column="file_name"/>
<result property="fileUrl" column="file_url"/>
</resultMap>
<!--sql片段-->
<sql id="myFileCol">
file_id,file_name,file_url
</sql>
<!--查询文件-->
<select id="selectAll" resultMap="myFileMap">
select * from my_file
</select>
<!--添加文件内容到数据库-->
<insert id="insert" parameterType="MyFile">
insert into my_file values (null,#{fileName},#{fileUrl})
</insert>
<!--移除文件-->
<delete id="deleteFile">
delete from my_file where file_id=#{fileId}
</delete>
</mapper>
UsersMapper.xml
<?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 namespace="com.hqyj.psl.mapper.UsersMapper">
<!--1.结果映射-->
<resultMap id="usersMap" type="Users">
<id property="usersId" column="users_id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="address" column="address"/>
<result property="phone" column="phone"/>
<result property="email" column="email"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<result property="isVip" column="is_vip"/>
<result property="deleted" column="deleted"/>
<result property="joinDate" column="join_time"/>
</resultMap>
<!--2.数据库字段片段-->
<sql id="UsersCol">
users_id,name,sex,address,phone,email,username,password,is_vip,deleted,join_time
</sql>
<!--分页查所有用户-->
<select id="selectAll" resultMap="usersMap">
select <include refid="UsersCol"/> from users where deleted = 0
</select>
<!--根据名称查询user-->
<select id="selectOneByUsername" resultMap="usersMap">
select <include refid="UsersCol"/> from user
where username=#{username}
</select>
<update id="update">
update users
set name=#{name},sex=#{sex},address=#{address},
phone=#{phone},email=#{email},username=#{username},
password=#{password},deleted=#{deleted},join_time=#{joinDate}
where users_id=#{usersId}
</update>
<!--逻辑删除-->
<update id="deleteUpdByUserId" >
update users set deleted = 1 where users_id=#{usersId}
</update>
<delete id="deleteByUserId">
delete from user where user_id=#{id}
</delete>
<insert id="insert">
insert into users values (null,#{name},#{sex},#{address},
#{phone},#{email},#{username},#{password},#{isVip},#{deleted},#{joinDate})
</insert>
<select id="search" resultMap="usersMap">
select * from users
<where>
deleted = 0
<if test="username!=null and username!=''">
and username like CONCAT(CONCAT('%',#{username},'%'))
</if>
<if test="phone!=null and phone!=''">
and phone like CONCAT(CONCAT('%',#{phone},'%'))
</if>
</where>
</select>
<!--逻辑删除全部-->
<update id="deleteAll" parameterType="list">
update users set deleted=1
<where>
<foreach collection="list" item="item" index="index" open="users_id in (" close=")" separator=",">
#{item}
</foreach>
</where>
</update>
<!--查找被逻辑删除的-->
<select id="selectByDeletedUsers" resultMap="usersMap">
select <include refid="UsersCol"/> from users where deleted = 1
</select>
<!--恢复删除-->
<update id="renew">
update users set deleted = 0 where users_id = #{usersId}
</update>
<!--全部恢复-->
<update id="updateRenbit" parameterType="list">
update users set deleted = 0
<where>
<foreach collection="list" item="item" index="index" open="users_id in (" close=")" separator=",">
#{item}
</foreach>
</where>
</update>
<!--删除-->
<delete id="phyDel">
delete from users where users_id = #{usersId}
</delete>
<!--条件查找-->
<select id="condQuery" resultMap="usersMap">
select <include refid="UsersCol"/> from users
<where>
deleted = 1
<if test="username != '%%'" >
and name like #{username}
</if>
</where>
</select>
</mapper>
OrdersMapper.xml(订单表映射)
<?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 namespace="com.hqyj.psl.mapper.OrdersMapper">
<!--1.结果映射-->
<resultMap id="ordersMap" type="Orders">
<id property="ordersId" column="orders_id"/>
<result property="ordersNo" column="orders_no"/>
<result property="ordersName" column="orders_name"/>
<result property="phone" column="phone"/>
<result property="totalAmount" column="total_amount"/>
<result property="payAmount" column="pay_amount"/>
<result property="ordersState" column="orders_state"/>
<result property="payState" column="pay_state"/>
<result property="shipmentsState" column="shipments_state"/>
<result property="giveMethod" column="give_method"/>
<result property="ordersTime" column="orders_time"/>
</resultMap>
<!--2.sql片段-->
<sql id="ordersCol">
Orders,orders_id,orders_no,orders_name,phone,total_amount,pay_amount,orders_state,pay_state,shipments_state,give_method,orders_time
</sql>
<select id="selectAll" resultMap="ordersMap">
select * from orders
</select>
<delete id="delete">
delete from orders where orders_id = #{ordersId}
</delete>
<update id="update">
update orders set orders_name = #{ordersName},shipments_state = #{shipmentsState},give_method = #{giveMethod} where orders_id = #{ordersId}
</update>
<update id="insert">
insert into orders values (null,#{ordersNo},#{ordersName},#{phone},#{totalAmount},#{payAmount},#{ordersState},#{payState},#{shipmentsState},#{giveMethod},#{ordersTime})
</update>
<!--模糊查询-->
<select id="selectLike" resultMap="ordersMap">
select * from orders
<where>
<if test="payState!=''">
and pay_state = #{payState}
</if>
<if test="ordersState!=''">
and orders_state = #{ordersState}
</if>
<if test="ordersNo!='%%'">
and orders_no like #{ordersNo}
</if>
<if test="isVip!=null">
and orders_id IN(
SELECT orders_id
FROM orders_users
WHERE users_id IN (
SELECT users_id
FROM users
WHERE is_vip = #{isVip}
))
</if>
</where>
</select>
<delete id="deleteAll" parameterType="List">
delete from orders
<where>
<foreach collection="list" index="index" item="item" open="orders_id in (" close=")" separator=",">
#{item}
</foreach>
</where>
</delete>
</mapper>
RoleMapper.xml
<?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 namespace="com.hqyj.psl.mapper.RoleMapper">
<!--结果集-->
<resultMap id="adminVoMapper" type="AdminVo">
<!--Role里面的字段-->
<id property="adminId" column="admin_id"/>
<result property="username" column="username"/>
<result property="rname" column="rname"/>
<result property="url" column="url"/>
<!--Roles集合-->
<collection property="roles" ofType="Role">
<id property="roleId" column="role_id"/>
<result property="name" column="rname"/>
<result property="state" column="state"/>
</collection>
<!--Permission集合-->
<!-- <collection property="permissions" ofType="Permission">-->
<!-- <id property="permissionId" column="permission_id"/>-->
<!-- <result property="url" column="url"/>-->
<!-- <result property="state" column="pstate"/>-->
<!-- </collection>-->
</resultMap>
<!-- 根据用户名查询所有拥有的角色-->
<select id="selectRolesByUsername" resultType="java.lang.String">
SELECT ad.*,r.`role_id`,r.`name` as rname,r.`state` FROM admin_role ar
LEFT JOIN admin ad ON ad.`admin_id`=ar.`admin_id`
LEFT JOIN role r ON r.`role_id`=ar.`role_id`
WHERE ad.`username`=#{username}
</select>
<!-- 查询所有角色-->
<select id="selectRoleAll" resultMap="adminVoMapper">
SELECT role_id,NAME rname FROM role;
</select>
<!-- <select id="selectRoleAll" resultMap="adminVoMapper">-->
<!-- SELECT ad.*, r.`name` rname,r.role_id,r.state FROM admin_role ar-->
<!-- LEFT JOIN admin ad ON ad.`admin_id`=ar.`admin_id`-->
<!-- LEFT JOIN role r ON r.`role_id`=ar.`role_id`-->
<!-- GROUP BY ad.`admin_id`;-->
<!-- </select>-->
<!--查询所有角色的admin_id-->
<!-- 根据角色查询所有拥有权限-->
<select id="selectPermsByRole" resultType="java.lang.String">
SELECT p.`url` FROM role_permission rp
LEFT JOIN role r ON rp.`role_id`=r.`role_id`
LEFT JOIN permission p ON rp.`permission_id`=p.`permission_id`
WHERE r.`role_id`=#{roleId};
</select>
<!--根据用户名查询所有拥有的权限-->
<select id="selectPermsByUsername" resultMap="adminVoMapper">
SELECT DISTINCT p.url FROM role_permission rp
LEFT JOIN role r ON r.role_id=rp.role_id
LEFT JOIN permission p ON p.permission_id=rp.permission_id
WHERE rp.role_id IN
(SELECT r.role_id FROM admin_role ad
LEFT JOIN admin a ON a.admin_id=ad.admin_id
LEFT JOIN role r ON r.role_id=ad.role_id
WHERE username = #{username})
</select>
<!--修改角色名-->
<select id="updateRoleName" resultType="java.lang.Integer">
UPDATE role SET NAME=#{name} WHERE role_id=#{roleId}
</select>
<!--修改权限-->
<!--删除权限关联表中的关联-->
<delete id="deleteRole_P">
DELETE FROM role_permission WHERE role_id=#{roleId}
</delete>
<!--根据权限名url查询权限id-->
<select id="selectPreId" resultType="java.lang.Integer">
SELECT permission_id FROM permission WHERE url=#{url};
</select>
<!--添加权限关联表中的关联添加 preid roleId-->
<insert id="addRole_P">
INSERT INTO role_permission VALUES(null,#{arg0},#{arg1});
</insert>
<!--删除角色-->
<delete id="deleteRole">
DELETE FROM role WHERE role_id=#{roleId}
</delete>
<!--添加角色-->
<!--1.在Role表中添加角色名-->
<insert id="addRoleName">
INSERT INTO role VALUES(NULL,#{name},1);
</insert>
<!--2.查询Role表中的roleId 通过角色名-->
<select id="selectRoleByName" resultType="java.lang.Integer">
SELECT role_id FROM role WHERE NAME=#{name};
</select>
</mapper>
application.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">
<!--整合容器-->
<import resource="classpath:spring-dao.xml"/>
<import resource="classpath:spring-service.xml"/>
<import resource="classpath:spring-mvc.xml"/>
<import resource="classpath:spring-shiro.xml"/>
</beans>
db.properties(mysql配置)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///ssmweb
user=root
password=root
#c3p0.minPoolSize = 10
#c3p0.maxPoolSize = 20
#c3p0.initialPoolSize = 100
#c3p0.maxIdleTime = 30
#c3p0.acquireIncrement = 5
logj.properties(日志容器)
#如果要输出到文件,下面一行后面增加一个,File
log4j.rootLogger=DEBUG, Console
#配置输出log到文件
#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
#指定输出目录
log4j.appender.File.File = logs/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
#配置输出到Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%c] - %m%n
# spring框架和apache的包输出日志级别为INFO
log4j.logger.org.springframework=INFO
log4j.logger.org.apache=INFO
mybits-config.xml(存储过程及映射)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置日志及缓存-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--配置别名-->
<typeAliases>
<typeAlias type="com.hqyj.psl.entity.Users" alias="Users"/>
<typeAlias type="com.hqyj.psl.entity.MyFile" alias="MyFile"/>
<typeAlias type="com.hqyj.psl.entity.Admin" alias="Admin"/>
<typeAlias type="com.hqyj.psl.entity.Orders" alias="Orders"/>
<typeAlias type="com.hqyj.psl.entity.Role" alias="Role"/>
<typeAlias type="com.hqyj.psl.entity.AdminVo" alias="AdminVo"/>
<typeAlias type="com.hqyj.psl.entity.Permission" alias="Permission"/>
</typeAliases>
</configuration>
spring-dao.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">
<!--0.扫描包-->
<context:component-scan base-package="com.hqyj.psl.mapper"/>
<!--1.引入db.properties-->
<context:property-placeholder location="classpath:db.properties"/>
<!--2.dataSource-->
<!-- druid连接-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close" lazy-init="false">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
<property name="initialSize" value="3" />
<property name="maxActive" value="5" />
<property name="maxWait" value="3000" />
</bean>
<!--3.sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
helperDialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
<!--4.动态生成Dao接口实现类-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSessionFactory 注意其类型为String 只需要注入bean的名称就可以-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--给出扫描的包,告诉他为谁生成-->
<property name="basePackage" value="com.hqyj.psl.mapper"/>
</bean>
</beans>
spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"
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.psl.controller"/>
<!--2.配置注解驱动-->
<mvc:annotation-driven>
<!--json乱码问题-->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
</bean>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean
class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
<property name="failOnEmptyBeans" value="false"/>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!--3配置静态资源-->
<mvc:resources mapping="/static/**" location="/static/"/>
<mvc:resources mapping="/upload/**" location="/upload/"/>
<!--4.静态资源的servlet配置 -->
<mvc:default-servlet-handler/>
<!--5.配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--6.配置文档上传下载配置 ,如果没有使用文件可以不用配置,同时也不用引入pomjar-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--编码-->
<property name="defaultEncoding" value="utf-8"/>
<property name="maxUploadSize" value="10480000000"/>
<property name="maxInMemorySize" value="40960"/>
</bean>
</beans>
spring-service.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.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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--1.配置扫描包-->
<context:component-scan base-package="com.hqyj.psl.service"/>
<!-- <!–2.配置事务对象–>-->
<!-- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">-->
<!-- <property name="dataSource" ref="dataSource"/>-->
<!-- </bean>-->
<!--3.开启事务注解支持-->
<!-- <tx:annotation-driven transaction-manager="transactionManager"/>-->
<!--4.事务的第二种方式 -->
<!-- <tx:advice id="accountTransaction" transaction-manager="transactionManager">-->
<!-- <tx:attributes>-->
<!-- <tx:method name="changeMoney" isolation="DEFAULT" propagation="REQUIRED" rollback-for="java.lang.RuntimeException"/>-->
<!-- <tx:method name="change*"/>-->
<!-- <!–可以写多个方法-->
<!-- 1.直接写方法名-->
<!-- 2.通配符:select *-->
<!-- –>-->
<!-- </tx:attributes>-->
<!-- </tx:advice>-->
<!-- -->
</beans>
spring-shiro.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">
<!--0.密码匹配器-->
<bean id="passwordMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
<!--设置加密方式-->
<property name="hashAlgorithmName" value="MD5"/>
<!--加密次数-->
<property name="hashIterations" value="1024"/>
</bean>
<!--1.配置进行授权和认证的Realm-->
<bean id="myRealm" class="com.hqyj.psl.realm.UserRealm">
<!--注入密码适配器-->
<!-- <property name="credentialsMatcher" ref="passwordMatcher"/>-->
</bean>
<!--2.配置SecurityManage-->
<bean id="securityManage" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!--设置Realm-->
<property name="realm" ref="myRealm"/>
</bean>
<!--3.配置shiroFilter,必须和web.xml中的file-name一致,拦截请求资源-->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManage"/>
<!--如果非法访问时,设置默认跳转的资源的url 跳转回登录页面-->
<property name="loginUrl" value="/login"/>
<!--无权访问跳转页面-->
<property name="unauthorizedUrl" value="/noPower"/>
<!--配置拦截-->
<property name="filterChainDefinitions">
<value>
<!--
身份:
anno 匿名访问
authc 认证后才能访问
roles[角色名] 注意!!!:roles[角色1,角色2],表示满足两个角色的用户才能访问
perms[权限名] 拥有某个权限的用户
-->
/login=anon
/index=authc
/admin-role=roles[admin]
<!-- /users/userList=roles[simple,admin]-->
/users/delete=perms[delete]<!--zhangsan不能访问-->
/users/deleteAll=perms[delete]<!--zhangsan不能访问-->
/users/renew=perms[update]
/users/phyDel=perms[delete]
/users/renewAll=perms[update]
/orders/deleteAll=perms[delete]
/orders/delete=perms[delete]
/myFileAjax/deleteFile=perms[delete]
</value>
</property>
</bean>
</beans>
三、后端功能实现
1.实体层(entity)
Admin.java
package com.hqyj.psl.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/18
* \* Time: 22:20
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Admin {
private Integer adminId;
private String sex;
private String name;
private String phone;
private String email;
private String remark;
private String username;
private String password;
}
AdminVo.java
package com.hqyj.psl.entity;
import lombok.Data;
import java.util.List;
@Data
public class AdminVo extends Admin {
private Integer adminId;
private String username;
private List<Role> roles;
private Integer roleId;
private String rname;
private String url;
// private List<Permission> permissions;
}
MyFile.java
package com.hqyj.psl.entity;
import lombok.Data;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/17
* \* Time: 14:06
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Data
public class MyFile {
private Integer fileId;
private String fileName;
private String fileUrl;//存储的是Tomcat中的war包中的地址
}
Orders.java
package com.hqyj.psl.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
public class Orders extends UsersPage{
private Integer ordersId;
private String ordersNo;
private String ordersName;
private String phone;
private Double totalAmount;
private Double payAmount;
private String ordersState;
private String payState;
private String shipmentsState;
private String giveMethod;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date ordersTime;
private Integer isVip;
private String listId;
public String getListId() {
return listId;
}
public void setListId(String listId) {
this.listId = listId;
}
public Integer getIsVip() {
return isVip;
}
public void setIsVip(Integer isVip) {
this.isVip = isVip;
}
@Override
public String toString() {
return "Orders{" +
"ordersId=" + ordersId +
", ordersNo='" + ordersNo + '\'' +
", ordersName='" + ordersName + '\'' +
", phone='" + phone + '\'' +
", totalAmount=" + totalAmount +
", payAmount=" + payAmount +
", ordersState='" + ordersState + '\'' +
", payState='" + payState + '\'' +
", shipmentsState='" + shipmentsState + '\'' +
", giveMethod='" + giveMethod + '\'' +
", ordersTime=" + ordersTime +
", isVip=" + isVip +
", listId=" + listId +
'}';
}
public Integer getOrdersId() {
return ordersId;
}
public void setOrdersId(Integer ordersId) {
this.ordersId = ordersId;
}
public String getOrdersNo() {
return ordersNo;
}
public void setOrdersNo(String ordersNo) {
this.ordersNo = ordersNo;
}
public String getOrdersName() {
return ordersName;
}
public void setOrdersName(String ordersName) {
this.ordersName = ordersName;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Double getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(Double totalAmount) {
this.totalAmount = totalAmount;
}
public Double getPayAmount() {
return payAmount;
}
public void setPayAmount(Double payAmount) {
this.payAmount = payAmount;
}
public String getOrdersState() {
return ordersState;
}
public void setOrdersState(String ordersState) {
this.ordersState = ordersState;
}
public String getPayState() {
return payState;
}
public void setPayState(String payState) {
this.payState = payState;
}
public String getShipmentsState() {
return shipmentsState;
}
public void setShipmentsState(String shipmentsState) {
this.shipmentsState = shipmentsState;
}
public String getGiveMethod() {
return giveMethod;
}
public void setGiveMethod(String giveMethod) {
this.giveMethod = giveMethod;
}
@JsonFormat(pattern = "yyyy-MM-dd")
public Date getOrdersTime() {
return ordersTime;
}
public void setOrdersTime(Date ordersTime) {
this.ordersTime = ordersTime;
}
}
Permission.java
package com.hqyj.psl.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Permission {
private Integer permissionId;
private String url="sdfasdf";
private String state;
}
Role.java
package com.hqyj.psl.entity;
import lombok.Data;
@Data
public class Role {
private Integer roleId;
private String name;
private String state;
}
Users.java
package com.hqyj.psl.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/19
* \* Time: 13:52
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
public class Users extends UsersPage {
private Integer usersId;
private String name;//昵称
private String sex;
private String address;
private String phone;
private String email;
private String username;
private String password;
private Integer isVip;
private Integer deleted;//做逻辑删除的
private String bitId;
private String rbitId;
public String getRbitId() {
return rbitId;
}
public void setRbitId(String rbitId) {
this.rbitId = rbitId;
}
public String getBitId() {
return bitId;
}
public void setBitId(String bitId) {
this.bitId = bitId;
}
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date joinDate;//入职日期
@Override
public String toString() {
return "Users{" +
"usersId=" + usersId +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
", phone='" + phone + '\'' +
", email='" + email + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", isVip=" + isVip +
", deleted=" + deleted +
", joinDate=" + joinDate +
'}';
}
public Integer getUsersId() {
return usersId;
}
public void setUsersId(Integer usersId) {
this.usersId = usersId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getIsVip() {
return isVip;
}
public void setIsVip(Integer isVip) {
this.isVip = isVip;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
@JsonFormat(pattern = "yyyy-MM-dd")
public Date getJoinDate() {
return joinDate;
}
public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
}
UsersPage.java
package com.hqyj.psl.entity;
import lombok.Data;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/16
* \* Time: 14:07
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Data
public class UsersPage {
private Integer page;//页数
private Integer num;//每页数量
}
2.持久层(mapper)又称dao层
AdminMapper.java
package com.hqyj.psl.mapper;
import com.hqyj.psl.entity.Admin;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/18
* \* Time: 23:13
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Repository
public interface AdminMapper {
Admin selectByName(String username);
Integer insertBySignup(String username, String password);
Integer update(Admin admin);
Admin show(Admin admin);
//根据用户名查询所拥有的角色
List<String> selectRolesByUsername(String name);
//根据用户名查询拥有的权限
List<String> selectPermsByUsername(String name);
}
MyFileMapper.java
package com.hqyj.psl.mapper;
import com.hqyj.psl.entity.MyFile;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface MyFileMapper {
//查所有
List<MyFile> selectAll();
//添加
Integer insert(MyFile myFile);
//删除
//修改
//根据id查询
//移除文件
Integer deleteFile(MyFile myFile);
}
OrdersMapper.java
package com.hqyj.psl.mapper;
import com.hqyj.psl.entity.Orders;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface OrdersMapper {
/*List<Orders> selectAll();*/
//删除
Integer delete(Orders orders);
//修改
Integer update(Orders orders);
//修改
Integer insert(Orders orders);
//模糊查/查所有
List<Orders> selectLike(Orders orders);
Integer deleteAll(List list);
}
RoleMapper.java
package com.hqyj.psl.mapper;
import com.hqyj.psl.entity.AdminVo;
import com.hqyj.psl.entity.Role;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface RoleMapper {
//查找所有角色
List<AdminVo> selectRoleAll();
//根据角色查询所有拥有权限
List<String> selectPermsByRole(Integer roleId);
//根据用户名查询所有拥有的角色
List<String> selectRolesByUsername(String username);
//根据用户名查询所有拥有的权限
List<String> selectPermsByUsername(String username);
//添加角色及其权限
//修改角色与权限
//直接修改role表修改角色名
Integer updateRoleName(Role role);
//修改权限
//删除权限关联表中的关联
Integer deleteRole_P(Integer roleId);
//根据权限名url查询权限id
Integer selectPreId(String url);
//添加权限关联表中的关联添加 preid
Integer addRole_P(Integer rId, Integer pId);
//删除逻辑
//1.删除Role表中的关系
Integer deleteRole(Integer roleId);
//2.删除Role_Pre中的关系
//上面有方法
//添加角色逻辑
//1.在Role表中添加角色名
Integer addRoleName(Role role);
//2.查询Role表中的roleId 通过角色名
Integer selectRoleByName(Role role);
//3.根据权限名url查询权限id
//修改里面有方法
//4.添加权限关联表中的关联添加 preid
//修改里面有方法
}
UsersMapper.java
package com.hqyj.psl.mapper;
import com.hqyj.psl.entity.Users;
import com.hqyj.psl.entity.Users;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UsersMapper {
//查所有
List<Users> selectAll();
//添加
Integer insert(Users users);
//删除
Integer deleteByUserId(Integer id);
//修改
Integer update(Users users);
//逻辑删除
Integer deleteUpdByUserId(Integer usersId);
List<Users> search(Users users);
Integer deleteAll(List list);
//查找逻辑删除的
List<Users> selectByDeletedUsers();
//恢复删除
Integer renew(Integer usersId);
//物理删除
Integer phyDel(Integer usersId);
//条件查找
List<Users> condQuery(Users user);
//批量恢复
Integer updateRenbit(List list);
/*登录*/
Users selectOneByUsername(String username);
//
// //根据用户名查询所拥有的角色
// List<String> selectRolesByUsername(String username);
// //根据用户名查询拥有的权限
// List<String> selectPermsByUsername(String username);
}
3.业务层(service)
service(定义接口)
AdminService.java
package com.hqyj.psl.service;
import com.hqyj.psl.entity.Admin;
import com.hqyj.psl.entity.AdminVo;
import com.hqyj.psl.utils.ResultUtils;
import javax.servlet.http.HttpSession;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/19
* \* Time: 14:06
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
public interface AdminService {
ResultUtils login(Admin admin, HttpSession session);
ResultUtils register(Admin admin);
ResultUtils logout(HttpSession session);
ResultUtils update(Admin admin);
ResultUtils show(Admin admin);
}
MyFileService.java
package com.hqyj.psl.service;
import com.hqyj.psl.entity.MyFile;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public interface MyFileService {
//查所有
ResultUtils fileList();
//增加
ResultUtils insert(MyFile myFile);
//文档的上传 MultipartFile.transferTo 将接受到的文件传输到给定的目标文件
ResultUtils upload(MultipartFile multipartFile, HttpServletRequest request);
//文档的下载
ResponseEntity<byte[]> downLoad(String fileName, HttpServletRequest request) throws IOException;
//文档移除
ResultUtils deleteFile(MyFile myFile);
}
OrdersService.java
package com.hqyj.psl.service;
import com.hqyj.psl.entity.Orders;
import com.hqyj.psl.utils.ResultUtils;
public interface OrdersService {
/*ResultUtils ordersList(Orders orders);//查所有*/
ResultUtils delete(Orders orders);//删除
ResultUtils update(Orders orders);//修改
ResultUtils insert(Orders orders);//增加
ResultUtils selectLike(Orders orders);//模糊查/查所有
ResultUtils deleteAll(Orders orders);//批量删除
}
UsersService.java
package com.hqyj.psl.service;
import com.hqyj.psl.entity.Users;
import com.hqyj.psl.utils.ResultUtils;
import javax.servlet.http.HttpSession;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/19
* \* Time: 14:00
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
public interface UsersService {
ResultUtils usersList(Users user);
ResultUtils login(Users user, HttpSession session);
ResultUtils logout(HttpSession session);
ResultUtils update(Users user);
ResultUtils deleteUpdByUserId(Users user);
ResultUtils delete(Integer id);
ResultUtils insert (Users user);
ResultUtils search(Users users);
ResultUtils deleteAll(Users users);
ResultUtils selectByDeletedUsers(Users user);//查找被逻辑删除的
ResultUtils renew(Users user);//恢复删除
ResultUtils phyDel(Users user);//物理删除
ResultUtils condQuery(Users user);//条件查找
ResultUtils renewAll(Users user);//批量恢复
}
Impl(实现接口)
AdminServiceImpl.java
package com.hqyj.psl.service.impl;
import com.hqyj.psl.entity.Admin;
import com.hqyj.psl.entity.AdminVo;
import com.hqyj.psl.mapper.AdminMapper;
import com.hqyj.psl.service.AdminService;
import com.hqyj.psl.utils.ResultUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
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 javax.servlet.http.HttpSession;
import java.util.List;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/19
* \* Time: 14:06
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Service
public class AdminServiceImpl implements AdminService {
@Autowired
private AdminMapper adminMapper;
@Override
public ResultUtils login(Admin admin, HttpSession session) {
//0.非空验证
if (admin.getUsername() == "" || admin.getPassword() == "") {
return new ResultUtils(500, "用户名不能为空", null);
}
try {
//1.获取当前用户对象主体
Subject subject = SecurityUtils.getSubject();
System.out.println("service中的subject对象:" + subject);
//2.将请求参数封装到token中
UsernamePasswordToken token = new UsernamePasswordToken(admin.getUsername(), admin.getPassword());
//3。完成登录
subject.login(token);
session.setAttribute("user",admin.getUsername());
session.setAttribute("admin",admin);
return new ResultUtils(200, "登录成功", null);
} catch (UnknownAccountException e) {
return new ResultUtils(500, "用户名不存在", null);
} catch (IncorrectCredentialsException e) {
return new ResultUtils(500, "密码错误", null);
}
}
@Override
public ResultUtils register(Admin admin) {
Integer integer = adminMapper.insertBySignup(admin.getUsername(),admin.getPassword());
return new ResultUtils(200,"注册成功","success");
}
@Override
public ResultUtils logout(HttpSession session) {
//退出(session失效)
//基于登录状态下放入session中所有的属性,如用户信息(状态),购物车等
session.invalidate();
//session移除某一个属性
//session.removeAttribute("user");
return new ResultUtils(200,"退出成功","login");
}
//修改用户个人信息
@Override
public ResultUtils update(Admin admin) {
System.out.println("修改里面的数据"+admin);
Integer update = adminMapper.update(admin);
return new ResultUtils(200,"修改成功","");
}
//数据回显
@Override
public ResultUtils show(Admin admin) {
Admin show = adminMapper.show(admin);
return new ResultUtils(200,"显示成功",show);
}
}
MyFileServiceImpl.java
package com.hqyj.psl.service.impl;
import com.hqyj.psl.entity.MyFile;
import com.hqyj.psl.mapper.MyFileMapper;
import com.hqyj.psl.service.MyFileService;
import com.hqyj.psl.utils.ResultUtils;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/17
* \* Time: 14:25
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Service
public class MyFileServiceImpl implements MyFileService {
@Autowired
private MyFileMapper myFileMapper;
@Override
public ResultUtils fileList() {
return new ResultUtils(200,"",myFileMapper.selectAll());
}
@Override
public ResultUtils insert(MyFile myFile) {
myFileMapper.insert(myFile);
return new ResultUtils(200,"添加成功",null);
}
@Override
public ResultUtils upload(MultipartFile multipartFile, HttpServletRequest request) {
try {
//1.获取文件上传目录的路径
String filePath= request.getSession().getServletContext().getRealPath("upload");//虚拟路径
System.out.println("上传文件的目录路径"+filePath);
//2.获取上传的文件名
String fileName = multipartFile.getOriginalFilename();
System.out.println("上传的文件名"+fileName);
//3.创建File对象
File f = new File(filePath+"/"+fileName);
//4.判断文件上传的目录是否存在
if (!f.isDirectory()){
//创建目录
System.out.println("文件上传目录是否存在");
f.mkdirs();
}
//5.上传文件
multipartFile.transferTo(f);
//6.创建map封装记录文件名及文件路径
HashMap<String, Object> map = new HashMap<>();
//localhost:8080/upload/a.txt
map.put("servicePath","/upload/"+fileName);
map.put("fileName",fileName);
return new ResultUtils(200,"上传成功",map);
} catch (IOException e) {
e.printStackTrace();
return new ResultUtils(500,"上传失败",null);
}
}
@Override
public ResponseEntity<byte[]> downLoad(String fileName, HttpServletRequest request) throws IOException {
//1.获取文档上传的路径
String filePath = request.getSession().getServletContext().getRealPath("upload");
System.out.println("获取文件上传的路径"+filePath);
//2.创建文件对象
File file = new File(filePath + "/" + fileName);
//3.设置httpHeaders,使浏览器响应下载
HttpHeaders headers = new HttpHeaders();
//4.设置响应方式
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//5.设置响应头
/*
* headerName:
* contentType:响应的内容格式
* contentDisposition
* -inline:直接在页面展示a
* -attachment:以附件的形式下载
*
* 乱码处理:
* */
headers.set("Content-Disposition","attachment;fileName="+
new String(fileName.getBytes("utf-8"),"ISO8859-1")+"");
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
}
//移除文件
@Override
public ResultUtils deleteFile(MyFile myFile) {
Integer integer = myFileMapper.deleteFile(myFile);
return new ResultUtils(200,"移除成功",null);
}
}
OrderServiceImpl.java
package com.hqyj.psl.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hqyj.psl.entity.Orders;
import com.hqyj.psl.mapper.OrdersMapper;
import com.hqyj.psl.service.OrdersService;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Service
public class OrderServiceImpl implements OrdersService {
@Autowired
private OrdersMapper ordersMapper;
/*@Override
public ResultUtils ordersList(Orders orders) {
//开启分页
PageHelper.startPage(orders.getPage(),orders.getNum());
List<Orders> orders1 = ordersMapper.selectAll();
System.out.println(orders1+"-----------");
PageInfo list = new PageInfo(orders1);
HashMap<String, Object> map = new HashMap<>();
map.put("totalPage",list.getPages());//总页数
map.put("list",list.getList());//每页的数据
map.put("total",list.getTotal());//总条数
return new ResultUtils(200,"",map);
}*/
@Override
public ResultUtils delete(Orders orders) {
ordersMapper.delete(orders);
return new ResultUtils(200,"删除成功",null);
}
@Override
public ResultUtils update(Orders orders) {
ordersMapper.update(orders);
return new ResultUtils(200,"修改成功",null);
}
@Override
public ResultUtils insert(Orders orders) {
orders.setOrdersTime(new Date());
ordersMapper.insert(orders);
return new ResultUtils(200,"添加成功",null);
}
@Override//模糊查/查所有
public ResultUtils selectLike(Orders orders) {
System.out.println(orders);
//开启分页
PageHelper.startPage(orders.getPage(),orders.getNum());
List<Orders> order = ordersMapper.selectLike(orders);
PageInfo list = new PageInfo(order);
HashMap<String, Object> map = new HashMap<>();
map.put("totalPage",list.getPages());//总页数
map.put("list",list.getList());//每页的数据
map.put("total",list.getTotal());//总条数
return new ResultUtils(200,"找到"+order.size()+"条数据",map);
}
@Override
public ResultUtils deleteAll(Orders orders) {
String[] split = orders.getListId().split(",");
List<String> strings = Arrays.asList(split);
Integer integer = ordersMapper.deleteAll(strings);
if (integer > 0)
return new ResultUtils(200,"删除成功",null);
return null;
}
}
RoleServiceImpl.java
package com.hqyj.psl.service.impl;
import com.hqyj.psl.entity.AdminVo;
import com.hqyj.psl.entity.Role;
import com.hqyj.psl.mapper.RoleMapper;
import com.hqyj.psl.service.RoleService;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
private RoleMapper roleMapper;
@Override
public ResultUtils selectRolePerAll() {
// //测试获取所有角色
// List<AdminVo> strings = adminMapper.selectRoleAll();
// //根据角色拿去对应权限
// HashMap<String, List<String>> map = new HashMap<>();
// for (int i = 0; i < strings.size(); i++) {
// AdminVo adminVo = strings.get(i);
// String username =adminVo.getUsername();
// Integer adminId = adminVo.getAdminId();
// List<String> url = adminMapper.selectPermsByRole(username);
// url.add(adminId.toString());
// map.put(username,url);
// }
// System.out.println("数据已经拿到了:"+map);
//测试获取所有角色
List<AdminVo> strings = roleMapper.selectRoleAll();
//根据角色拿去对应权限
System.out.println(strings);
// HashMap<String, List<String>> map = new HashMap<>();
for (int i = 0; i < strings.size(); i++) {
AdminVo adminVo = strings.get(i);
String username =adminVo.getUsername();
Integer roleId = adminVo.getRoles().get(0).getRoleId();
List<String> url = roleMapper.selectPermsByRole(roleId);
strings.get(i).setUrl(url.toString());
// map.put(username,url);
}
System.out.println(strings);
return new ResultUtils(200,"获取成功",strings);
}
@Override
public ResultUtils updateRoleAndPer(AdminVo adminVo) {
try {
//直接修改role表修改角色名
Role role = new Role();
role.setRoleId(adminVo.getRoleId());
role.setName(adminVo.getRname());
roleMapper.updateRoleName(role);
//修改权限
//删除权限关联表中的关联
roleMapper.deleteRole_P(role.getRoleId());
//根据权限名url查询权限id
String[] split = adminVo.getUrl().split(" ");
System.out.println("我是权限:" + split);
for (int i = 0; i < split.length; i++) {
if (!(split[i].equals(""))) {
System.out.println("我是权限......+"+split[i]);
Integer preId = roleMapper.selectPreId(split[i]);
System.out.println("我是preId....."+preId);
//添加权限关联表中的关联添加 preid
roleMapper.addRole_P(role.getRoleId(), preId);
}
}
return new ResultUtils(200,"修改成功",null);
}catch (Exception e){
return new ResultUtils(500,"修改失败",null);
}
}
//删除Role
@Override
public ResultUtils deleteRole(AdminVo adminVo) {
try {
//删除Role_pre中的关系
roleMapper.deleteRole_P(adminVo.getRoleId());
//删除Role中角色
roleMapper.deleteRole(adminVo.getRoleId());
return new ResultUtils(200,"删除成功",null);
}catch (Exception e){
return new ResultUtils(500,"删除失败",null);
}
}
//添加逻辑
@Override
public ResultUtils addRole(AdminVo adminVo) {
try {
Role role = new Role();
role.setName(adminVo.getRname());
//添加角色逻辑
//1.在Role表中添加角色名
roleMapper.addRoleName(role);
//2.查询Role表中的roleId 通过角色名
Integer roleId = roleMapper.selectRoleByName(role);
role.setRoleId(roleId);
//3.根据权限名url查询权限id
String[] split = adminVo.getUrl().split(" ");
System.out.println("我是权限:" + split);
for (int i = 0; i < split.length; i++) {
if (!(split[i].equals(""))) {
Integer preId = roleMapper.selectPreId(split[i]);
//添加权限关联表中的关联添加 preid
roleMapper.addRole_P(role.getRoleId(), preId);
}
}
return new ResultUtils(200, "添加成功", null);
}catch (Exception e){
return new ResultUtils(500, "添加失败", null);
}
}
}
UsersServiceImpl.java
package com.hqyj.psl.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hqyj.psl.entity.Users;
import com.hqyj.psl.mapper.UsersMapper;
import com.hqyj.psl.service.UsersService;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpSession;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/19
* \* Time: 14:01
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Service
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersMapper usersMapper;
@Override
public ResultUtils search(Users users) {
PageHelper.startPage(users.getPage(),users.getNum());
List<Users> search = usersMapper.search(users);
PageInfo pageInfo = new PageInfo(search);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("totalPage",pageInfo.getPages());
hashMap.put("list",pageInfo.getList());
hashMap.put("total",pageInfo.getTotal());
return new ResultUtils(200,"模糊查询分页",hashMap);
}
@Override
public ResultUtils deleteAll(Users users) {
//处理字符串
String[] strings = users.getBitId().split(",");
//将字符数组转为list
List<String> list = Arrays.asList(strings);
System.out.println(list);
usersMapper.deleteAll(list);
return new ResultUtils(200,"删除成功",null);
}
@Override
public ResultUtils usersList(Users users) {
//开启分页
PageHelper.startPage(users.getPage(),users.getNum());
//获取所有数据
List<Users> userAll = usersMapper.selectAll();
System.out.println("分页");
PageInfo list = new PageInfo(userAll);
HashMap<String, Object> map = new HashMap<>();
map.put("totalPage",list.getPages());//总页数
map.put("list",list.getList()); //每页显示的数据
map.put("total",list.getTotal());//总条数
return new ResultUtils(200,"",map);
}
@Override
public ResultUtils login(Users users, HttpSession session) {
return null;
}
@Override
public ResultUtils logout(HttpSession session) {
return null;
}
@Override
public ResultUtils update(Users users) {
users.setDeleted(0);
System.out.println("跑了");
users.setJoinDate(new Date());
Integer update = usersMapper.update(users);
if (update>0){
return new ResultUtils(200,"修改成功",null);
}else {
return new ResultUtils(500,"修改失败",null);
}
}
@Override
public ResultUtils deleteUpdByUserId(Users users) {
usersMapper.deleteUpdByUserId(users.getUsersId());
return new ResultUtils(200,"删除成功",null);
}
@Override
public ResultUtils delete(Integer id) {
return null;
}
@Override
public ResultUtils insert(Users users) {
System.out.println(users);
users.setDeleted(0);
users.setJoinDate(new Date());
usersMapper.insert(users);
return new ResultUtils(200,"已添加",null);
}
@Override
public ResultUtils selectByDeletedUsers(Users user) {
System.out.println("当前页:" + user.getPage());
System.out.println("当前页条数:" + user.getNum());
//开启分页
PageHelper.startPage(user.getPage(),user.getNum());
//PageHelper.startPage(1,2);
//获取所有数据
List<Users> users = usersMapper.selectByDeletedUsers();
PageInfo list = new PageInfo(users);
HashMap<String, Object> map = new HashMap<>();
map.put("totalPage",list.getPages());//总页数
map.put("list",list.getList());//每页显示的数据
map.put("total",list.getTotal());//总条数
return new ResultUtils(200,"",map);
}
//恢复删除
@Override
public ResultUtils renew(Users user) {
usersMapper.renew(user.getUsersId());
return new ResultUtils(200,"恢复成功",null);
}
@Override
public ResultUtils phyDel(Users user) {
usersMapper.phyDel(user.getUsersId());
return new ResultUtils(200,"删除成功",null);
}
//查找全部被逻辑删除的
@Override
public ResultUtils condQuery(Users user) {
System.out.println("当前页:" + user.getPage());
System.out.println("当前页条数:" + user.getNum());
//开启分页
PageHelper.startPage(user.getPage(), user.getNum());
//PageHelper.startPage(1,2);
//获取所有数据
List<Users> users = usersMapper.condQuery(user);
PageInfo list = new PageInfo(users);
HashMap<String, Object> map = new HashMap<>();
map.put("totalPage", list.getPages());//总页数
map.put("list", list.getList());//每页显示的数据
map.put("total", list.getTotal());//总条数
return new ResultUtils(200, "查找成功", map);
}
//批量恢复
@Override
public ResultUtils renewAll(Users users) {
//1.处理字符串
String[] strings = users.getRbitId().split(",");
//2.将字符转为list
List<String> list = Arrays.asList(strings);
System.out.println("id为:"+list);
//3.
usersMapper.updateRenbit(list);
return new ResultUtils(200,"恢复成功",null);
}
}
4.控制层(controller)
AdminController.java
package com.hqyj.psl.controller;
import com.hqyj.psl.entity.AdminVo;
import com.hqyj.psl.service.RoleService;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AdminController {
@Autowired
private RoleService roleService;
//前端角色逻辑
@RequestMapping("/adminRole/{url}")
public ResultUtils adminRole(@PathVariable String url, AdminVo adminVo){
System.out.println("前端发送的数据为:"+url);
switch (url){
case "role":return roleService.selectRolePerAll();
case "updateRole": return roleService.updateRoleAndPer(adminVo);
case "deleteRole": return roleService.deleteRole(adminVo);
case "addRole": return roleService.addRole(adminVo);
// return adminService.addRole(adminVo);
}
return null;
}
}
FileController.java
package com.hqyj.psl.controller;
import com.hqyj.psl.entity.MyFile;
import com.hqyj.psl.service.MyFileService;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/17
* \* Time: 15:00
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@RestController
public class FileController {
@Autowired
private MyFileService myFileService;
//执行file的增删查改请求
@RequestMapping("/myFileAjax/{url}")
public ResultUtils myFileAjax(@PathVariable String url, MyFile myFile){
switch (url){
case "insert":
return myFileService.insert(myFile);
case "fileList":
return myFileService.fileList();
case "deleteFile":
return myFileService.deleteFile(myFile);
}
return null;
}
//文档上传请求
@RequestMapping("/file/upload")
public ResultUtils upload(@RequestParam("file") MultipartFile file, HttpServletRequest request){
return myFileService.upload(file,request);
}
//文件下载
@RequestMapping("/file/downLoad")
public ResponseEntity<byte[]> downLoad(String fileName,HttpServletRequest request) throws IOException{
return myFileService.downLoad(fileName,request);
}
}
package com.hqyj.psl.controller;
import com.hqyj.psl.entity.Orders;
import com.hqyj.psl.service.OrdersService;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrdersController {
@Autowired
private OrdersService ordersService;
@RequestMapping("/orders/{url}")
public ResultUtils toOrders(@PathVariable String url, Orders orders){
switch (url){
/*case "ordersList"://查所有
return ordersService.ordersList(orders);*/
case "delete"://删除
return ordersService.delete(orders);
case "update"://修改
return ordersService.update(orders);
case "insert"://增加
return ordersService.insert(orders);
case "selectLike"://模糊查
return ordersService.selectLike(orders);
case "deleteAll"://模糊查
return ordersService.deleteAll(orders);
}
return null;
}
}
OrdersController.java
package com.hqyj.psl.controller;
import com.hqyj.psl.entity.Orders;
import com.hqyj.psl.service.OrdersService;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrdersController {
@Autowired
private OrdersService ordersService;
@RequestMapping("/orders/{url}")
public ResultUtils toOrders(@PathVariable String url, Orders orders){
switch (url){
/*case "ordersList"://查所有
return ordersService.ordersList(orders);*/
case "delete"://删除
return ordersService.delete(orders);
case "update"://修改
return ordersService.update(orders);
case "insert"://增加
return ordersService.insert(orders);
case "selectLike"://模糊查
return ordersService.selectLike(orders);
case "deleteAll"://模糊查
return ordersService.deleteAll(orders);
}
return null;
}
}
PageController.java
package com.hqyj.psl.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/15
* \* Time: 16:30
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Controller
public class PageController {
@RequestMapping("/{url}")
public String login(@PathVariable String url){
return url;
}
}
UsersController.java
package com.hqyj.psl.controller;
import com.hqyj.psl.entity.Admin;
import com.hqyj.psl.entity.Users;
import com.hqyj.psl.entity.Users;
import com.hqyj.psl.service.AdminService;
import com.hqyj.psl.service.UsersService;
import com.hqyj.psl.service.UsersService;
import com.hqyj.psl.utils.ResultUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/12
* \* Time: 10:21
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@RestController
public class UsersController {
@Autowired
private UsersService usersService;
@Autowired
private AdminService adminService;
@RequestMapping("/admin/{url}")
public ResultUtils login(@PathVariable String url, Admin admin, HttpSession session){
switch (url){
case "login":
return adminService.login(admin,session);
case "signup":
return adminService.register(admin);
case "logout":
return adminService.logout(session);
case "update":
return adminService.update(admin);
case "showAdm":
return adminService.show(admin);
}
return null;
}
@RequestMapping("/users/{url}")
// @ResponseBody
public ResultUtils toLogin(@PathVariable String url, Users users, HttpSession session){
switch (url){
case "login" :
return usersService.login(users,session);
case "deleteAll":
return usersService.deleteAll(users);
case "search":
return usersService.search(users);
case "userList":
return usersService.usersList(users);
case "updateUsers":
return usersService.update(users);
case "deleteUserById":
return usersService.delete(users.getUsersId());
case "insertUser":
return usersService.insert(users);
case "delete":
return usersService.deleteUpdByUserId(users);
case "userDel":
return usersService.selectByDeletedUsers(users);
case"renew":
return usersService.renew(users);
case"phyDel":
return usersService.phyDel(users);
case"condQuery":
System.out.println("1");
return usersService.condQuery(users);
case"renewAll":
return usersService.renewAll(users);
}
return null;
// 1.接受数据
}
}
5.工具层(utils)
MdFiveUtils.java
package com.hqyj.psl.utils;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.springframework.stereotype.Component;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/20
* \* Time: 9:41
* \* To change this template use File | Settings | File Templates.
* \* Description:
* \
*/
@Component//注册bean
public class MdFiveUtils {
public String changePassword(String salt,String password){
Md5Hash md5Hash = new Md5Hash(salt);
SimpleHash pwd = new SimpleHash("MD5", password, md5Hash, 1024);
return pwd.toString();
}
public static void main(String[] args) {
MdFiveUtils md = new MdFiveUtils();
String zhangsan = md.changePassword("zhangsan", "123456");
System.out.println(zhangsan);
}
}
ResultUtils.java
package com.hqyj.psl.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/16
* \* Time: 10:12
* \* To change this template use File | Settings | File Templates.
* \* Description:
* 结果集工具类
* \
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultUtils {
private Integer code;//状态码
private String msg;//消息信息
private Object data;//返回对象
}
UserRealm.java
6.登录实现层(realm)
package com.hqyj.psl.realm;
import com.hqyj.psl.entity.Admin;
import com.hqyj.psl.mapper.AdminMapper;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.TestConstructor;
import java.util.List;
/**
* \* Created with IntelliJ IDEA.
* \* User: PuSongLin
* \* Date: 2022/8/18
* \* Time: 9:41
* \* To change this template use File | Settings | File Templates.
* \* Description: 领域:用于帮我们认证添加当前主体(subject--用户)的角色信息,权限信息
* \
*/
public class UserRealm extends AuthorizingRealm {
@Autowired
private AdminMapper adminMapper;
@Override//授权
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//1.获取当前登录的用户
String name = principalCollection.fromRealm(this.getName()).iterator().next()+"";
System.out.println("获取当前登录的用户"+name);
//2.根据用户名查询角色及权限信息
List<String> roles = adminMapper.selectRolesByUsername(name);
List<String> perms = adminMapper.selectPermsByUsername(name);
System.out.println("角色为:"+roles+"权限为:"+perms);
//3.获取授权信息对象
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
System.out.println("授权对象"+simpleAuthorizationInfo);
//4.添加角色信息
simpleAuthorizationInfo.addRoles(roles);
//5.添加授权信息
simpleAuthorizationInfo.addStringPermissions(perms);
System.out.println("授权信息:"+simpleAuthorizationInfo);
return simpleAuthorizationInfo;
}
@Override//认证-- 此处可究,量力而行
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//1.取出token对象 authenticationToken
UsernamePasswordToken token= (UsernamePasswordToken)authenticationToken;
System.out.println("token对象:"+token);
//2.获取身份凭证
String username = token.getPrincipal()+"";
System.out.println("凭证为:"+username);
//3.检验是否存在
Admin admin =adminMapper.selectByName(username);
//4.判断用户是否存在
if (admin==null){
throw new UnknownAccountException();
}
// return new SimpleAuthenticationInfo(用户名,密码,盐值,realm名字);
//new Md5Hash(admin.getUsername()),
System.out.println("权限:"+admin.getUsername()+"密码:"+admin.getPassword()+"realm:"+this.getName());
return new SimpleAuthenticationInfo(admin.getUsername(),admin.getPassword(),this.getName());
}
}
四、前端功能实现
1.static(前端静态资源显示)
这里下载解压到webappp文件下面
链接:https://pan.baidu.com/s/1D_EFbLyAO_faeH6uVEQvJA?pwd=9uwv
提取码:9uwv
2.upoad(文件上传目录)
在webapp文件下创建一个upload文件用于储存我们上传的文件。
3.jsp(显示页面格式为:xxx.jsp)
具体实现代码我这里就不写了
源代码就放在这里了。
链接:https://pan.baidu.com/s/1gS1p2XhJTyRY0vxCaBsYfQ?pwd=tzzk
提取码:tzzk
总结
提示:这里对文章进行总结:
有什么不懂,欢迎各位评论留言
都看到这里了,请各位的发财小手手点个赞。谢谢!