src/main/java/org/springblade/common/config/ServerConfig.java
New file @@ -0,0 +1,66 @@ package org.springblade.common.config; import org.springframework.boot.web.context.WebServerInitializedEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; import java.net.InetAddress; import java.net.UnknownHostException; /** * 服务器配置 * @author zhongrj * @since 2022-01-07 */ @Component public class ServerConfig implements ApplicationListener<WebServerInitializedEvent> { private int serverPort; /** * 获取服务器 url * @return */ public String getUrl() { InetAddress address = null; try { address = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } return "http://"+address.getHostAddress() +":"+this.serverPort; } /** * 获取服务器 ip * @return */ public String getServerIp() { InetAddress address = null; try { address = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } return address.getHostAddress(); } /** * 获取服务器 hostname * @return */ public String getServerHostName() { InetAddress address = null; try { address = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } return address.getHostName(); } @Override public void onApplicationEvent(WebServerInitializedEvent event) { this.serverPort = event.getWebServer().getPort(); } } src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
@@ -23,6 +23,7 @@ import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import org.springblade.common.cache.CacheNames; import org.springblade.common.config.ServerConfig; import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.jwt.JwtUtil; import org.springblade.core.jwt.props.JwtProperties; @@ -43,12 +44,18 @@ import org.springblade.modules.exam.entity.ExamPaper; import org.springblade.modules.exam.service.ExamPaperService; import org.springblade.modules.exam.vo.ExamPaperVO; import org.springblade.modules.loginrecord.entity.LoginRecord; import org.springblade.modules.loginrecord.service.LoginRecordService; import org.springblade.modules.system.entity.UserInfo; import org.springblade.modules.zc.service.IZcService; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.time.Duration; import java.util.Date; import java.util.List; import java.util.UUID; @@ -71,6 +78,10 @@ private final JwtProperties jwtProperties; private final IZcService iZcService; private final ExamPaperService examPaperService; private final LoginRecordService loginRecordService; private final ServerConfig serverConfig; /** * 登录 @@ -131,10 +142,37 @@ } } } }else { //新增登录记录 this.saveLoginRecord(userInfo); } return TokenUtil.createAuthInfo(userInfo); } /** * 新增登录记录信息 * @param userInfo */ private void saveLoginRecord(UserInfo userInfo) { //创建对象 LoginRecord loginRecord = new LoginRecord(); //request 对象获取 ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = requestAttributes.getRequest(); //数据封装 loginRecord.setCreateTime(new Date()); loginRecord.setServerIp(serverConfig.getServerIp()); loginRecord.setServerHost(serverConfig.getServerHostName()); loginRecord.setRequestUri(request.getRequestURI()); loginRecord.setRemoteIp(request.getRemoteAddr()); loginRecord.setDeptId(userInfo.getUser().getDeptId()); loginRecord.setUserId(userInfo.getUser().getId()); loginRecord.setType("1"); loginRecord.setCreateBy(userInfo.getUser().getRealName()); //新增 loginRecordService.save(loginRecord); } @GetMapping("/oauth/logout") @ApiOperation(value = "退出登录") src/main/java/org/springblade/modules/loginrecord/controller/LoginRecordController.java
New file @@ -0,0 +1,94 @@ package org.springblade.modules.loginrecord.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.modules.loginrecord.entity.LoginRecord; import org.springblade.modules.loginrecord.service.LoginRecordService; import org.springblade.modules.loginrecord.vo.LoginRecordVo; import org.springframework.web.bind.annotation.*; /** * @author zhongrj * @time 2022-01-07 * @desc 登录记录控制层 */ @RestController @AllArgsConstructor @RequestMapping("/loginRecord") public class LoginRecordController { private final LoginRecordService loginRecordService; /** * 自定义分页 * @param query page,size * @param loginRecord 登录记录信息对象 */ @GetMapping("/page") public R<IPage<LoginRecordVo>> page(LoginRecordVo loginRecord, Query query) { IPage<LoginRecordVo> pages = loginRecordService.selectSecurityPaperPage(Condition.getPage(query), loginRecord); return R.data(pages); } /** * 新增 * @param loginRecord 登录记录信息对象 */ @PostMapping("/save") @ApiOperation(value = "新增", notes = "传入loginRecord") public R save(@RequestBody LoginRecord loginRecord){ return R.data(loginRecordService.save(loginRecord)); } /** * 修改 * @param loginRecord 登录记录信息对象 */ @PostMapping("/update") public R update(@RequestBody LoginRecord loginRecord){ return R.status(loginRecordService.updateById(loginRecord)); } /** * 新增或修改 * @param loginRecord 登录记录信息对象 */ @PostMapping("/submit") public R submit(@RequestBody LoginRecord loginRecord){ if (null==loginRecord.getId()){ loginRecordService.save(loginRecord); }else { loginRecordService.updateById(loginRecord); } return R.data(loginRecord); } /** * 删除 * @param ids 登录记录信息ids 数组 */ @PostMapping("/remove") public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) { return R.status(loginRecordService.removeByIds(Func.toLongList(ids))); } /** * 详情 * @param loginRecord 登录记录信息对象 */ @GetMapping("/detail") @ApiOperation(value = "详情", notes = "传入loginRecord") public R<LoginRecord> detail(LoginRecord loginRecord) { LoginRecord detail = loginRecordService.getOne(Condition.getQueryWrapper(loginRecord)); return R.data(detail); } } src/main/java/org/springblade/modules/loginrecord/entity/LoginRecord.java
New file @@ -0,0 +1,74 @@ package org.springblade.modules.loginrecord.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.util.Date; /** * 登录记录实体类 * @author zhongrj * @time 2022-01-07 */ @Data @TableName("sys_login_record") public class LoginRecord implements Serializable { private static final long serialVersionUID = 1L; /** * 登录记录主键id,非自增 */ @TableId(value = "id",type = IdType.ASSIGN_ID) private Long id; private Long userId; /** * 服务器名 */ private String serverHost; /** * 服务器ip */ private String serverIp; /** * 登录类型 1:外网 2:内网 */ private String type; /** * 请求uri */ private String requestUri; /** * 请求ip */ private String remoteIp; /** * 请求人姓名 */ private String createBy; /** * 创建时间 */ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; /** * 公司部门id */ private String deptId; } src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.java
New file @@ -0,0 +1,25 @@ package org.springblade.modules.loginrecord.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import org.springblade.modules.loginrecord.entity.LoginRecord; import org.springblade.modules.loginrecord.vo.LoginRecordVo; import java.util.List; /** * 工商信息Mapper 接口 * @author zhongrj */ public interface LoginRecordMapper extends BaseMapper<LoginRecord> { /** * 登录记录自定义分页 * @param page * @param loginRecord * @return */ List<LoginRecordVo> selectSecurityPaperPage(@Param("page") IPage<LoginRecordVo> page,@Param("loginRecord") LoginRecordVo loginRecord); } src/main/java/org/springblade/modules/loginrecord/mapper/LoginRecordMapper.xml
New file @@ -0,0 +1,22 @@ <?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="org.springblade.modules.loginrecord.mapper.LoginRecordMapper"> <!--登录记录自定义分页信息--> <select id="selectSecurityPaperPage" resultType="org.springblade.modules.loginrecord.vo.LoginRecordVo"> select slr.*, bd.dept_name deptName from sys_login_record slr left join blade_dept bd on bd.id = slr.dept_id <if test="loginRecord.deptName!=null and loginRecord.deptName!=''"> bd.dept_name like concat('%',#{loginRecord.deptName},'%') </if> <if test="loginRecord.createBy!=null and loginRecord.createBy!=''"> slr.create_by like concat('%',#{loginRecord.createBy},'%') </if> order by slr.id desc </select> </mapper> src/main/java/org/springblade/modules/loginrecord/service/LoginRecordService.java
New file @@ -0,0 +1,20 @@ package org.springblade.modules.loginrecord.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import org.springblade.modules.loginrecord.entity.LoginRecord; import org.springblade.modules.loginrecord.vo.LoginRecordVo; /** * 登录记录服务类 * @author zhongrj */ public interface LoginRecordService extends IService<LoginRecord> { /** * 自定义分页 * @param page * @param loginRecord 登录记录信息对象 */ IPage<LoginRecordVo> selectSecurityPaperPage(IPage<LoginRecordVo> page, LoginRecordVo loginRecord); } src/main/java/org/springblade/modules/loginrecord/service/impl/LoginRecordServiceImpl.java
New file @@ -0,0 +1,32 @@ package org.springblade.modules.loginrecord.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import org.springblade.modules.loginrecord.entity.LoginRecord; import org.springblade.modules.loginrecord.mapper.LoginRecordMapper; import org.springblade.modules.loginrecord.service.LoginRecordService; import org.springblade.modules.loginrecord.vo.LoginRecordVo; import org.springframework.stereotype.Service; /** * 保安员证管理服务实现类 * @author zhongrj * @since 2022-01-07 */ @Service @AllArgsConstructor public class LoginRecordServiceImpl extends ServiceImpl<LoginRecordMapper, LoginRecord> implements LoginRecordService { /** * 自定义分页 * @param page * @param loginRecord 登录记录信息对象 * @return */ @Override public IPage<LoginRecordVo> selectSecurityPaperPage(IPage<LoginRecordVo> page, LoginRecordVo loginRecord) { return page.setRecords(baseMapper.selectSecurityPaperPage(page,loginRecord)); } } src/main/java/org/springblade/modules/loginrecord/vo/LoginRecordVo.java
New file @@ -0,0 +1,17 @@ package org.springblade.modules.loginrecord.vo; import lombok.Data; import org.springblade.modules.loginrecord.entity.LoginRecord; import java.io.Serializable; /** * 登录记录vo * @author zhongrj * @since 2022-01-07 */ @Data public class LoginRecordVo extends LoginRecord implements Serializable { private String deptName; }