2020-08-18 10:46:34.098 [SessionValidationThread-1] INFO o.a.s.s.m.AbstractValidatingSessionManager - [validateSessions,308] - Finished session validation. No sessions were stopped. | 2020-08-18 10:46:34.098 [SessionValidationThread-1] INFO o.a.s.s.m.AbstractValidatingSessionManager - [validateSessions,308] - Finished session validation. No sessions were stopped. | ||||
2020-08-18 10:50:37.500 [SpringContextShutdownHook] INFO o.s.s.c.ThreadPoolTaskScheduler - [shutdown,208] - Shutting down ExecutorService 'taskScheduler' | 2020-08-18 10:50:37.500 [SpringContextShutdownHook] INFO o.s.s.c.ThreadPoolTaskScheduler - [shutdown,208] - Shutting down ExecutorService 'taskScheduler' | ||||
2020-08-18 10:50:37.809 [SpringContextShutdownHook] INFO c.a.d.p.DruidDataSource - [close,1825] - {dataSource-1} closed | 2020-08-18 10:50:37.809 [SpringContextShutdownHook] INFO c.a.d.p.DruidDataSource - [close,1825] - {dataSource-1} closed | ||||
2020-08-18 15:05:11.530 [SpringContextShutdownHook] INFO o.s.s.c.ThreadPoolTaskScheduler - [shutdown,208] - Shutting down ExecutorService 'taskScheduler' | |||||
2020-08-18 15:05:11.785 [SpringContextShutdownHook] INFO c.a.d.p.DruidDataSource - [close,1825] - {dataSource-1} closed |
package com.taauav.api.controller; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.web.bind.annotation.RestController; | |||||
import com.taauav.api.controller.ApiBaseController; | |||||
/** | |||||
* <p> | |||||
* 外包人员表 前端控制器 | |||||
* </p> | |||||
* | |||||
* @author zongjl | |||||
* @since 2020-08-18 | |||||
*/ | |||||
@RestController | |||||
@RequestMapping("/app-admin") | |||||
public class AppAdminController extends ApiBaseController { | |||||
} |
package com.taauav.api.entity; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableField; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import com.fasterxml.jackson.annotation.JsonFormat; | |||||
import com.taauav.common.domain.Entity; | |||||
import lombok.Data; | |||||
import lombok.EqualsAndHashCode; | |||||
import org.hibernate.validator.constraints.Length; | |||||
import javax.validation.constraints.NotEmpty; | |||||
import java.math.BigInteger; | |||||
import java.util.Date; | |||||
/** | |||||
* <p> | |||||
* 外包人员表 | |||||
* </p> | |||||
* | |||||
* @author 鲲鹏 | |||||
* @since 2020-05-14 | |||||
*/ | |||||
@Data | |||||
@EqualsAndHashCode(callSuper = false) | |||||
@TableName("user_admin") | |||||
public class AppAdmin extends Entity { | |||||
private static final long serialVersionUID = 1L; | |||||
/** | |||||
* 编号 | |||||
*/ | |||||
@TableId(value = "id", type = IdType.AUTO) | |||||
private Integer id; | |||||
/** | |||||
* 姓名 | |||||
*/ | |||||
@NotEmpty(message = "姓名不能为空") | |||||
@Length(min = 2, max = 10, message = "姓名长度为2-10") | |||||
private String realname; | |||||
/** | |||||
* 用户名 | |||||
*/ | |||||
@NotEmpty(message = "用户名不能为空") | |||||
@Length(min = 2, max = 20, message = "用户名长度为2-20个字符") | |||||
private String username; | |||||
/** | |||||
* 密码 | |||||
*/ | |||||
private String password; | |||||
/** | |||||
* 管理员拥有的规则id, 多个规则","隔开' | |||||
*/ | |||||
private String rules; | |||||
/** | |||||
* 公司 | |||||
*/ | |||||
private String company; | |||||
/** | |||||
* 部门ID | |||||
*/ | |||||
private Integer depId; | |||||
/** | |||||
* 头像 | |||||
*/ | |||||
private String avatar; | |||||
/** | |||||
* 性别:1男 2女 3保密 | |||||
*/ | |||||
private Integer gender; | |||||
/** | |||||
* 联系方式(手机号码) | |||||
*/ | |||||
private String mobile; | |||||
/** | |||||
* 邮箱 | |||||
*/ | |||||
private String email; | |||||
/** | |||||
* 河长等级:1一级 2二级 3三级 | |||||
*/ | |||||
private Integer level; | |||||
/** | |||||
* 区划ID | |||||
*/ | |||||
private BigInteger driverArea; | |||||
/** | |||||
* 职务 | |||||
*/ | |||||
private String duty; | |||||
/** | |||||
* 角色编号 | |||||
*/ | |||||
private String authGroup; | |||||
/** | |||||
* 备注 | |||||
*/ | |||||
private String note; | |||||
/** | |||||
* 最近登录时间 | |||||
*/ | |||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||||
private Date lastTime; | |||||
/** | |||||
* 登录次数 | |||||
*/ | |||||
private Integer loginNum; | |||||
/** | |||||
* 上次登录IP | |||||
*/ | |||||
private Long lastIp; | |||||
/** | |||||
* 排序 | |||||
*/ | |||||
private Integer sort; | |||||
/** | |||||
* 角色描述 | |||||
*/ | |||||
@TableField(exist = false) | |||||
private String authGroupText; | |||||
/** | |||||
* 状态描述 | |||||
*/ | |||||
@TableField(exist = false) | |||||
private String statusText; | |||||
} |
package com.taauav.api.mapper; | |||||
import com.taauav.api.entity.AppAdmin; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
/** | |||||
* <p> | |||||
* 外包人员表 Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author zongjl | |||||
* @since 2020-08-18 | |||||
*/ | |||||
public interface AppAdminMapper extends BaseMapper<AppAdmin> { | |||||
} |
<?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.taauav.api.mapper.AppAdminMapper"> | |||||
</mapper> |
package com.taauav.api.service; | |||||
import com.taauav.api.entity.AppAdmin; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
/** | |||||
* <p> | |||||
* 外包人员表 服务类 | |||||
* </p> | |||||
* | |||||
* @author zongjl | |||||
* @since 2020-08-18 | |||||
*/ | |||||
public interface IAppAdminService extends IService<AppAdmin> { | |||||
/** | |||||
* 根据用户获取数据 | |||||
* | |||||
* @param username | |||||
* @return | |||||
*/ | |||||
AppAdmin findByUsername(String username); | |||||
} |
package com.taauav.api.service.impl; | |||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||||
import com.taauav.api.entity.AppAdmin; | |||||
import com.taauav.api.mapper.AppAdminMapper; | |||||
import com.taauav.api.service.IAppAdminService; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import com.taauav.front.entity.UserAdmin; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* <p> | |||||
* 外包人员表 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author zongjl | |||||
* @since 2020-08-18 | |||||
*/ | |||||
@Service | |||||
public class AppAdminServiceImpl extends ServiceImpl<AppAdminMapper, AppAdmin> implements IAppAdminService { | |||||
@Autowired | |||||
private AppAdminMapper appAdminMapper; | |||||
@Value("${server.IMAGE_URL}") | |||||
private String imageUrl; | |||||
/** | |||||
* 获取用户信息 | |||||
* | |||||
* @param username 用户名 | |||||
* @return | |||||
*/ | |||||
@Override | |||||
public AppAdmin findByUsername(String username) { | |||||
QueryWrapper wrapper = new QueryWrapper(); | |||||
wrapper.eq("username", username); | |||||
wrapper.eq("mark", 1); | |||||
AppAdmin admin = appAdminMapper.selectOne(wrapper); | |||||
if (admin != null && !"".equals(admin.getAvatar())) { | |||||
admin.setAvatar(imageUrl + admin.getAvatar()); | |||||
} | |||||
return admin; | |||||
} | |||||
} |
import com.taauav.api.service.IInspectLogsService; | import com.taauav.api.service.IInspectLogsService; | ||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
import com.taauav.common.bean.Response; | import com.taauav.common.bean.Response; | ||||
import com.taauav.common.util.DateUtil; | |||||
import com.taauav.common.util.FileUtil; | |||||
import com.taauav.common.util.ImageUtil; | |||||
import com.taauav.common.util.StringUtils; | |||||
import com.taauav.common.util.*; | |||||
import org.apache.commons.codec.digest.DigestUtils; | import org.apache.commons.codec.digest.DigestUtils; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.beans.factory.annotation.Value; | import org.springframework.beans.factory.annotation.Value; | ||||
entity.setQuestionId(inspectLogsDto.getQuestionId()); | entity.setQuestionId(inspectLogsDto.getQuestionId()); | ||||
entity.setInspectResult(inspectLogsDto.getInspectResult()); | entity.setInspectResult(inspectLogsDto.getInspectResult()); | ||||
entity.setInspectImage(filePath); | entity.setInspectImage(filePath); | ||||
entity.setCreateUser(1); | |||||
entity.setCreateUser(ShiroUtils.getAdminId()); | |||||
entity.setCreateTime(DateUtil.now()); | entity.setCreateTime(DateUtil.now()); | ||||
Integer result = inspectLogsMapper.insert(entity); | Integer result = inspectLogsMapper.insert(entity); | ||||
if (result == 0) { | if (result == 0) { |
package com.taauav.api.service.impl; | package com.taauav.api.service.impl; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
import com.baomidou.mybatisplus.core.metadata.IPage; | import com.baomidou.mybatisplus.core.metadata.IPage; | ||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
String filePath = destNewFileUrl.replace(uploadFolder, ""); | String filePath = destNewFileUrl.replace(uploadFolder, ""); | ||||
inspectFile.setSrc(filePath); | inspectFile.setSrc(filePath); | ||||
inspectFile.setOriginalImg(filePath); | inspectFile.setOriginalImg(filePath); | ||||
inspectFile.setCreateUser(1); | |||||
inspectFile.setCreateUser(ShiroUtils.getAdminId()); | |||||
inspectFile.setCreateTime(DateUtil.now()); | inspectFile.setCreateTime(DateUtil.now()); | ||||
inspectFile.setThumbImg(thumbImg); | inspectFile.setThumbImg(thumbImg); | ||||
Integer result = inspectFileMapper.insert(inspectFile); | Integer result = inspectFileMapper.insert(inspectFile); | ||||
inspectQuestion.setQuestionId(inspectQuestionDto.getQuestionId()); | inspectQuestion.setQuestionId(inspectQuestionDto.getQuestionId()); | ||||
inspectQuestion.setQuestionNo(createQuestionNo()); | inspectQuestion.setQuestionNo(createQuestionNo()); | ||||
inspectQuestion.setNote(inspectQuestionDto.getQuestionNote()); | inspectQuestion.setNote(inspectQuestionDto.getQuestionNote()); | ||||
inspectQuestion.setCreateUser(1); | |||||
inspectQuestion.setCreateUser(ShiroUtils.getAdminId()); | |||||
inspectQuestion.setCreateTime(DateUtil.now()); | inspectQuestion.setCreateTime(DateUtil.now()); | ||||
Integer result2 = inspectQuestionMapper.insert(inspectQuestion); | Integer result2 = inspectQuestionMapper.insert(inspectQuestion); | ||||
if (result2 == 0) { | if (result2 == 0) { |
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
import com.taauav.api.dto.LoginDto; | import com.taauav.api.dto.LoginDto; | ||||
import com.taauav.api.entity.AppAdmin; | |||||
import com.taauav.api.service.ILoginService; | import com.taauav.api.service.ILoginService; | ||||
import com.taauav.common.bean.CacheUser; | import com.taauav.common.bean.CacheUser; | ||||
import com.taauav.common.bean.Response; | import com.taauav.common.bean.Response; | ||||
import com.taauav.common.config.AppUserToken; | |||||
import com.taauav.common.config.FrontUserToken; | import com.taauav.common.config.FrontUserToken; | ||||
import com.taauav.common.util.StringUtils; | import com.taauav.common.util.StringUtils; | ||||
import com.taauav.front.entity.UserAdmin; | import com.taauav.front.entity.UserAdmin; | ||||
Subject currentUser = SecurityUtils.getSubject(); | Subject currentUser = SecurityUtils.getSubject(); | ||||
// 将用户名和密码封装到UsernamePasswordToken | // 将用户名和密码封装到UsernamePasswordToken | ||||
UsernamePasswordToken token = new FrontUserToken(loginDto.getUsername(), loginDto.getPassword()); | |||||
UsernamePasswordToken token = new AppUserToken(loginDto.getUsername(), loginDto.getPassword()); | |||||
CacheUser cacheUser; | CacheUser cacheUser; | ||||
// 4、认证 | // 4、认证 | ||||
try { | try { | ||||
// 传到 MyShiroRealm 类中的方法进行认证 | // 传到 MyShiroRealm 类中的方法进行认证 | ||||
currentUser.login(token); | currentUser.login(token); | ||||
// 构建缓存用户信息返回给前端 | // 构建缓存用户信息返回给前端 | ||||
UserAdmin user = (UserAdmin) currentUser.getPrincipals().getPrimaryPrincipal(); | |||||
AppAdmin user = (AppAdmin) currentUser.getPrincipals().getPrimaryPrincipal(); | |||||
cacheUser = CacheUser.builder() | cacheUser = CacheUser.builder() | ||||
.token(currentUser.getSession().getId().toString()) | .token(currentUser.getSession().getId().toString()) | ||||
.build(); | .build(); |
package com.taauav.api.utils; | |||||
import com.taauav.common.util.JwtUtil; | |||||
import com.taauav.common.util.StringUtils; | |||||
import com.taauav.front.utils.ServletUtils; | |||||
import io.jsonwebtoken.Claims; | |||||
/** | |||||
* 封路信息工具类 | |||||
*/ | |||||
public class LoginUtils { | |||||
/** | |||||
* 获取登录用户ID | |||||
* | |||||
* @return | |||||
*/ | |||||
public static Integer getAdminId() { | |||||
String token = ServletUtils.getRequest().getHeader("token"); | |||||
Claims data = JwtUtil.parseJWT(token); | |||||
if (!StringUtils.isEmpty(data.get("id").toString())) { | |||||
return Integer.valueOf(data.get("id").toString()); | |||||
} | |||||
return 0; | |||||
} | |||||
} |
package com.taauav.common.config; | |||||
import org.apache.shiro.authc.UsernamePasswordToken; | |||||
/** | |||||
* 前台用户token | |||||
* @author dyg | |||||
*/ | |||||
public class AppUserToken extends UsernamePasswordToken { | |||||
public AppUserToken(String username, String password) | |||||
{ | |||||
super(username, password); | |||||
} | |||||
} |
import com.taauav.admin.entity.SysAuthRule; | import com.taauav.admin.entity.SysAuthRule; | ||||
import com.taauav.admin.service.ISysAdminService; | import com.taauav.admin.service.ISysAdminService; | ||||
import com.taauav.admin.service.ISysAuthRuleService; | import com.taauav.admin.service.ISysAuthRuleService; | ||||
import com.taauav.api.entity.AppAdmin; | |||||
import com.taauav.api.service.IAppAdminService; | |||||
import com.taauav.common.domain.Entity; | import com.taauav.common.domain.Entity; | ||||
import com.taauav.common.util.ShiroUtils; | import com.taauav.common.util.ShiroUtils; | ||||
import com.taauav.front.entity.UserAdmin; | import com.taauav.front.entity.UserAdmin; | ||||
private ISysAdminService iSysAdminService; | private ISysAdminService iSysAdminService; | ||||
@Autowired | @Autowired | ||||
private IUserAdminService userAdminService; | private IUserAdminService userAdminService; | ||||
@Autowired | |||||
private IAppAdminService appAdminService; | |||||
@Resource | @Resource | ||||
private ISysAuthRuleService iSysAuthRuleService; | private ISysAuthRuleService iSysAuthRuleService; | ||||
@Resource | @Resource | ||||
} | } | ||||
} | } | ||||
return authorizationInfo; | return authorizationInfo; | ||||
} else if (principals.getPrimaryPrincipal() instanceof AppAdmin) { | |||||
// APP 用户 | |||||
authorizationInfo.addStringPermission("*:*:*"); | |||||
} | } | ||||
return null; | return null; | ||||
} | } | ||||
// realm name | // realm name | ||||
getName() | getName() | ||||
); | ); | ||||
} else if (authenticationToken instanceof AppUserToken) { | |||||
// APP用户认证 | |||||
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; | |||||
//获取用户的输入的账号. | |||||
String userName = (String) token.getPrincipal(); | |||||
//通过username从数据库中查找 User对象. | |||||
//实际项目中,这里可以根据实际情况做缓存,如果不做,Shiro自己也是有时间间隔机制,2分钟内不会重复执行该方法 | |||||
AppAdmin user = appAdminService.findByUsername(userName); | |||||
if (Objects.isNull(user)) { | |||||
throw new UnknownAccountException("用户名或密码错误"); | |||||
} | |||||
String status = "1"; | |||||
if (!(status.equals(user.getStatus().toString()))) { | |||||
throw new UnknownAccountException("账号已被锁定,请联系管理员!"); | |||||
} | |||||
return new SimpleAuthenticationInfo( | |||||
// 这里传入的是user对象,比对的是用户名,直接传入用户名也没错,但是在授权部分就需要自己重新从数据库里取权限 | |||||
user, | |||||
// 密码 | |||||
user.getPassword(), | |||||
// salt = username + salt | |||||
ByteSource.Util.bytes(""), | |||||
// realm name | |||||
getName() | |||||
); | |||||
} else { | } else { | ||||
throw new UnknownAccountException("用户名或密码错误"); | throw new UnknownAccountException("用户名或密码错误"); | ||||
} | } |
package com.taauav.common.util; | package com.taauav.common.util; | ||||
import com.taauav.admin.entity.SysAdmin; | import com.taauav.admin.entity.SysAdmin; | ||||
import com.taauav.api.entity.AppAdmin; | |||||
import com.taauav.common.domain.Entity; | import com.taauav.common.domain.Entity; | ||||
import com.taauav.front.entity.UserAdmin; | import com.taauav.front.entity.UserAdmin; | ||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
} else if (object instanceof UserAdmin) { | } else if (object instanceof UserAdmin) { | ||||
UserAdmin admin = (UserAdmin) SecurityUtils.getSubject().getPrincipal(); | UserAdmin admin = (UserAdmin) SecurityUtils.getSubject().getPrincipal(); | ||||
adminId = admin.getId(); | adminId = admin.getId(); | ||||
} else if (object instanceof AppAdmin) { | |||||
AppAdmin admin = (AppAdmin) SecurityUtils.getSubject().getPrincipal(); | |||||
adminId = admin.getId(); | |||||
} | } | ||||
return adminId; | return adminId; | ||||
} | } |