Commit db66b0f6 authored by hkl's avatar hkl

feat:1.线路管理

parent 66c23824
package org.jeecg.common.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("统一分页查询")
public class PageSearch<T> {
@ApiModelProperty(value = "当前页码")
private Integer pageNo = 1;
@ApiModelProperty(value = "每页记录数")
private Integer pageSize = 10;
@ApiModelProperty(value = "查询载体")
private T query;
}
//package org.jeecg.config.mybatis;
//
//import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
//import net.sf.jsqlparser.expression.BinaryExpression;
//import net.sf.jsqlparser.expression.Expression;
//import net.sf.jsqlparser.expression.Parenthesis;
//import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
//import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
//import net.sf.jsqlparser.expression.operators.relational.*;
//import net.sf.jsqlparser.schema.Column;
//import net.sf.jsqlparser.schema.Table;
//import net.sf.jsqlparser.statement.select.*;
//
//import java.util.List;
//
///**
// * 复写租户条件
// */
//public class JeecgTenantParser extends TenantSqlParser {
//
// /**
// * @param expression
// * @param table
// * @return
// */
// protected Expression processTableAlias(Expression expression, Table table) {
// String tableAliasName;
// if (table.getAlias() == null) {
// tableAliasName = table.getName();
// } else {
// tableAliasName = table.getAlias().getName();
// }
//
// // in
// if (expression instanceof InExpression) {
// InExpression in = (InExpression) expression;
// if (in.getLeftExpression() instanceof Column) {
// setTableAliasNameForColumn((Column) in.getLeftExpression(), tableAliasName);
// }
//
// // 比较操作
// } else if (expression instanceof BinaryExpression) {
// BinaryExpression compare = (BinaryExpression) expression;
// if (compare.getLeftExpression() instanceof Column) {
// setTableAliasNameForColumn((Column) compare.getLeftExpression(), tableAliasName);
// } else if (compare.getRightExpression() instanceof Column) {
// setTableAliasNameForColumn((Column) compare.getRightExpression(), tableAliasName);
// }
//
// // between
// } else if (expression instanceof Between) {
// Between between = (Between) expression;
// if (between.getLeftExpression() instanceof Column) {
// setTableAliasNameForColumn((Column) between.getLeftExpression(), tableAliasName);
// }
// }
// return expression;
// }
//
// private void setTableAliasNameForColumn(Column column, String tableAliasName) {
// column.setColumnName(tableAliasName + "." + column.getColumnName());
// }
//
// /**
// * 默认是按 tenant_id=1 按等于条件追加
// *
// * @param currentExpression 现有的条件:比如你原来的sql查询条件
// * @param table
// * @return
// */
// @Override
// protected Expression builderExpression(Expression currentExpression, Table table) {
// final Expression tenantExpression = this.getTenantHandler().getTenantId(true);
// Expression appendExpression;
// if (!(tenantExpression instanceof SupportsOldOracleJoinSyntax)) {
// appendExpression = new EqualsTo();
// ((EqualsTo) appendExpression).setLeftExpression(this.getAliasColumn(table));
// ((EqualsTo) appendExpression).setRightExpression(tenantExpression);
// } else {
// appendExpression = processTableAlias(tenantExpression, table);
// }
// if (currentExpression == null) {
// return appendExpression;
// }
// if (currentExpression instanceof BinaryExpression) {
// BinaryExpression binaryExpression = (BinaryExpression) currentExpression;
// if (binaryExpression.getLeftExpression() instanceof FromItem) {
// processFromItem((FromItem) binaryExpression.getLeftExpression());
// }
// if (binaryExpression.getRightExpression() instanceof FromItem) {
// processFromItem((FromItem) binaryExpression.getRightExpression());
// }
// } else if (currentExpression instanceof InExpression) {
// InExpression inExp = (InExpression) currentExpression;
// ItemsList rightItems = inExp.getRightItemsList();
// if (rightItems instanceof SubSelect) {
// processSelectBody(((SubSelect) rightItems).getSelectBody());
// }
// }
// if (currentExpression instanceof OrExpression) {
// return new AndExpression(new Parenthesis(currentExpression), appendExpression);
// } else {
// return new AndExpression(currentExpression, appendExpression);
// }
// }
//
// @Override
// protected void processPlainSelect(PlainSelect plainSelect, boolean addColumn) {
// FromItem fromItem = plainSelect.getFromItem();
// if (fromItem instanceof Table) {
// Table fromTable = (Table) fromItem;
// if (!this.getTenantHandler().doTableFilter(fromTable.getName())) {
// plainSelect.setWhere(builderExpression(plainSelect.getWhere(), fromTable));
// if (addColumn) {
// plainSelect.getSelectItems().add(new SelectExpressionItem(new Column(this.getTenantHandler().getTenantIdColumn())));
// }
// }
// } else {
// processFromItem(fromItem);
// }
// List<Join> joins = plainSelect.getJoins();
// if (joins != null && joins.size() > 0) {
// joins.forEach(j -> {
// processJoin(j);
// processFromItem(j.getRightItem());
// });
// }
// }
//
//}
//package org.jeecg.config.mybatis;
//
//import lombok.extern.slf4j.Slf4j;
//
///**
// * 多租户 tenant_id存储器
// * @author: jeecg-boot
// */
//@Slf4j
//public class TenantContext {
// private static ThreadLocal<String> currentTenant = new ThreadLocal<>();
//
// public static void setTenant(String tenant) {
// log.debug(" setting tenant to " + tenant);
// currentTenant.set(tenant);
// }
//
// public static String getTenant() {
// return currentTenant.get();
// }
//
// public static void clear(){
// currentTenant.remove();
// }
//}
...@@ -65,89 +65,89 @@ public class ShiroConfig { ...@@ -65,89 +65,89 @@ public class ShiroConfig {
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>(); Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
//支持yml方式,配置拦截排除 //支持yml方式,配置拦截排除
if(jeecgBaseConfig!=null && jeecgBaseConfig.getShiro()!=null){ // if(jeecgBaseConfig!=null && jeecgBaseConfig.getShiro()!=null){
String shiroExcludeUrls = jeecgBaseConfig.getShiro().getExcludeUrls(); // String shiroExcludeUrls = jeecgBaseConfig.getShiro().getExcludeUrls();
if(oConvertUtils.isNotEmpty(shiroExcludeUrls)){ // if(oConvertUtils.isNotEmpty(shiroExcludeUrls)){
String[] permissionUrl = shiroExcludeUrls.split(","); // String[] permissionUrl = shiroExcludeUrls.split(",");
for(String url : permissionUrl){ // for(String url : permissionUrl){
filterChainDefinitionMap.put(url,"anon"); // filterChainDefinitionMap.put(url,"anon");
} // }
} // }
} // }
// 配置不会被拦截的链接 顺序判断 // // 配置不会被拦截的链接 顺序判断
filterChainDefinitionMap.put("/sys/cas/client/validateLogin", "anon"); //cas验证登录 // filterChainDefinitionMap.put("/sys/cas/client/validateLogin", "anon"); //cas验证登录
filterChainDefinitionMap.put("/sys/randomImage/**", "anon"); //登录验证码接口排除 // filterChainDefinitionMap.put("/sys/randomImage/**", "anon"); //登录验证码接口排除
filterChainDefinitionMap.put("/sys/checkCaptcha", "anon"); //登录验证码接口排除 // filterChainDefinitionMap.put("/sys/checkCaptcha", "anon"); //登录验证码接口排除
filterChainDefinitionMap.put("/sys/login", "anon"); //登录接口排除 // filterChainDefinitionMap.put("/sys/login", "anon"); //登录接口排除
filterChainDefinitionMap.put("/sys/mLogin", "anon"); //登录接口排除 // filterChainDefinitionMap.put("/sys/mLogin", "anon"); //登录接口排除
filterChainDefinitionMap.put("/sys/logout", "anon"); //登出接口排除 // filterChainDefinitionMap.put("/sys/logout", "anon"); //登出接口排除
filterChainDefinitionMap.put("/sys/thirdLogin/**", "anon"); //第三方登录 // filterChainDefinitionMap.put("/sys/thirdLogin/**", "anon"); //第三方登录
filterChainDefinitionMap.put("/sys/getEncryptedString", "anon"); //获取加密串 // filterChainDefinitionMap.put("/sys/getEncryptedString", "anon"); //获取加密串
filterChainDefinitionMap.put("/sys/sms", "anon");//短信验证码 // filterChainDefinitionMap.put("/sys/sms", "anon");//短信验证码
filterChainDefinitionMap.put("/sys/phoneLogin", "anon");//手机登录 // filterChainDefinitionMap.put("/sys/phoneLogin", "anon");//手机登录
filterChainDefinitionMap.put("/sys/user/checkOnlyUser", "anon");//校验用户是否存在 // filterChainDefinitionMap.put("/sys/user/checkOnlyUser", "anon");//校验用户是否存在
filterChainDefinitionMap.put("/sys/user/register", "anon");//用户注册 // filterChainDefinitionMap.put("/sys/user/register", "anon");//用户注册
filterChainDefinitionMap.put("/sys/user/phoneVerification", "anon");//用户忘记密码验证手机号 // filterChainDefinitionMap.put("/sys/user/phoneVerification", "anon");//用户忘记密码验证手机号
filterChainDefinitionMap.put("/sys/user/passwordChange", "anon");//用户更改密码 // filterChainDefinitionMap.put("/sys/user/passwordChange", "anon");//用户更改密码
filterChainDefinitionMap.put("/auth/2step-code", "anon");//登录验证码 // filterChainDefinitionMap.put("/auth/2step-code", "anon");//登录验证码
filterChainDefinitionMap.put("/sys/common/static/**", "anon");//图片预览 &下载文件不限制token // filterChainDefinitionMap.put("/sys/common/static/**", "anon");//图片预览 &下载文件不限制token
filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdf预览 // filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdf预览
filterChainDefinitionMap.put("/generic/**", "anon");//pdf预览需要文件 // filterChainDefinitionMap.put("/generic/**", "anon");//pdf预览需要文件
//
filterChainDefinitionMap.put("/sys/getLoginQrcode/**", "anon"); //登录二维码 // filterChainDefinitionMap.put("/sys/getLoginQrcode/**", "anon"); //登录二维码
filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //监听扫码 // filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //监听扫码
filterChainDefinitionMap.put("/sys/checkAuth", "anon"); //授权接口排除 // filterChainDefinitionMap.put("/sys/checkAuth", "anon"); //授权接口排除
//
//
filterChainDefinitionMap.put("/", "anon"); // filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/doc.html", "anon"); // filterChainDefinitionMap.put("/doc.html", "anon");
filterChainDefinitionMap.put("/**/*.js", "anon"); // filterChainDefinitionMap.put("/**/*.js", "anon");
filterChainDefinitionMap.put("/**/*.css", "anon"); // filterChainDefinitionMap.put("/**/*.css", "anon");
filterChainDefinitionMap.put("/**/*.html", "anon"); // filterChainDefinitionMap.put("/**/*.html", "anon");
filterChainDefinitionMap.put("/**/*.svg", "anon"); // filterChainDefinitionMap.put("/**/*.svg", "anon");
filterChainDefinitionMap.put("/**/*.pdf", "anon"); // filterChainDefinitionMap.put("/**/*.pdf", "anon");
filterChainDefinitionMap.put("/**/*.jpg", "anon"); // filterChainDefinitionMap.put("/**/*.jpg", "anon");
filterChainDefinitionMap.put("/**/*.png", "anon"); // filterChainDefinitionMap.put("/**/*.png", "anon");
filterChainDefinitionMap.put("/**/*.gif", "anon"); // filterChainDefinitionMap.put("/**/*.gif", "anon");
filterChainDefinitionMap.put("/**/*.ico", "anon"); // filterChainDefinitionMap.put("/**/*.ico", "anon");
filterChainDefinitionMap.put("/**/*.ttf", "anon"); // filterChainDefinitionMap.put("/**/*.ttf", "anon");
filterChainDefinitionMap.put("/**/*.woff", "anon"); // filterChainDefinitionMap.put("/**/*.woff", "anon");
filterChainDefinitionMap.put("/**/*.woff2", "anon"); // filterChainDefinitionMap.put("/**/*.woff2", "anon");
//
filterChainDefinitionMap.put("/druid/**", "anon"); // filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/swagger-ui.html", "anon"); // filterChainDefinitionMap.put("/swagger-ui.html", "anon");
filterChainDefinitionMap.put("/swagger**/**", "anon"); // filterChainDefinitionMap.put("/swagger**/**", "anon");
filterChainDefinitionMap.put("/webjars/**", "anon"); // filterChainDefinitionMap.put("/webjars/**", "anon");
filterChainDefinitionMap.put("/v2/**", "anon"); // filterChainDefinitionMap.put("/v2/**", "anon");
//
filterChainDefinitionMap.put("/sys/annountCement/show/**", "anon"); // filterChainDefinitionMap.put("/sys/annountCement/show/**", "anon");
//
//积木报表排除 // //积木报表排除
filterChainDefinitionMap.put("/jmreport/**", "anon"); // filterChainDefinitionMap.put("/jmreport/**", "anon");
filterChainDefinitionMap.put("/**/*.js.map", "anon"); // filterChainDefinitionMap.put("/**/*.js.map", "anon");
filterChainDefinitionMap.put("/**/*.css.map", "anon"); // filterChainDefinitionMap.put("/**/*.css.map", "anon");
//
//大屏模板例子 // //大屏模板例子
filterChainDefinitionMap.put("/test/bigScreen/**", "anon"); // filterChainDefinitionMap.put("/test/bigScreen/**", "anon");
filterChainDefinitionMap.put("/bigscreen/template1/**", "anon"); // filterChainDefinitionMap.put("/bigscreen/template1/**", "anon");
filterChainDefinitionMap.put("/bigscreen/template1/**", "anon"); // filterChainDefinitionMap.put("/bigscreen/template1/**", "anon");
//filterChainDefinitionMap.put("/test/jeecgDemo/rabbitMqClientTest/**", "anon"); //MQ测试 //filterChainDefinitionMap.put("/test/jeecgDemo/rabbitMqClientTest/**", "anon"); //MQ测试
//filterChainDefinitionMap.put("/test/jeecgDemo/html", "anon"); //模板页面 //filterChainDefinitionMap.put("/test/jeecgDemo/html", "anon"); //模板页面
//filterChainDefinitionMap.put("/test/jeecgDemo/redis/**", "anon"); //redis测试 //filterChainDefinitionMap.put("/test/jeecgDemo/redis/**", "anon"); //redis测试
//websocket排除 //websocket排除
filterChainDefinitionMap.put("/websocket/**", "anon");//系统通知和公告 // filterChainDefinitionMap.put("/websocket/**", "anon");//系统通知和公告
filterChainDefinitionMap.put("/newsWebsocket/**", "anon");//CMS模块 // filterChainDefinitionMap.put("/newsWebsocket/**", "anon");//CMS模块
filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTable无痕刷新示例 // filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTable无痕刷新示例
//性能监控——安全隐患泄露TOEKN(durid连接池也有) //性能监控——安全隐患泄露TOEKN(durid连接池也有)
//filterChainDefinitionMap.put("/actuator/**", "anon"); //filterChainDefinitionMap.put("/actuator/**", "anon");
//测试模块排除 //测试模块排除
filterChainDefinitionMap.put("/test/seata/**", "anon"); // filterChainDefinitionMap.put("/test/seata/**", "anon");
// update-begin--author:liusq Date:20230522 for:[issues/4829]访问不存在的url时会提示Token失效,请重新登录呢 // update-begin--author:liusq Date:20230522 for:[issues/4829]访问不存在的url时会提示Token失效,请重新登录呢
//错误路径排除 //错误路径排除
filterChainDefinitionMap.put("/error", "anon"); filterChainDefinitionMap.put("/**", "anon");
// update-end--author:liusq Date:20230522 for:[issues/4829]访问不存在的url时会提示Token失效,请重新登录呢 // update-end--author:liusq Date:20230522 for:[issues/4829]访问不存在的url时会提示Token失效,请重新登录呢
// 添加自己的过滤器并且取名为jwt // 添加自己的过滤器并且取名为jwt
...@@ -157,7 +157,7 @@ public class ShiroConfig { ...@@ -157,7 +157,7 @@ public class ShiroConfig {
filterMap.put("jwt", new JwtFilter(cloudServer==null)); filterMap.put("jwt", new JwtFilter(cloudServer==null));
shiroFilterFactoryBean.setFilters(filterMap); shiroFilterFactoryBean.setFilters(filterMap);
// <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边 // <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
filterChainDefinitionMap.put("/**", "jwt"); // filterChainDefinitionMap.put("/**", "jwt");
// 未授权界面返回JSON // 未授权界面返回JSON
shiroFilterFactoryBean.setUnauthorizedUrl("/sys/common/403"); shiroFilterFactoryBean.setUnauthorizedUrl("/sys/common/403");
......
...@@ -4,8 +4,10 @@ import java.util.Arrays; ...@@ -4,8 +4,10 @@ import java.util.Arrays;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.dto.PageSearch;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.subwayNetwork.dto.LightRailQueryDTO;
import org.jeecg.modules.subwayNetwork.entity.LightRail; import org.jeecg.modules.subwayNetwork.entity.LightRail;
import org.jeecg.modules.subwayNetwork.service.ILightRailService; import org.jeecg.modules.subwayNetwork.service.ILightRailService;
...@@ -15,6 +17,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -15,6 +17,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.subwayNetwork.vo.LightRailQueryVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
...@@ -40,22 +43,13 @@ public class LightRailController extends JeecgController<LightRail, ILightRailSe ...@@ -40,22 +43,13 @@ public class LightRailController extends JeecgController<LightRail, ILightRailSe
/** /**
* 分页列表查询 * 分页列表查询
* *
* @param lightRail
* @param pageNo
* @param pageSize
* @param req
* @return * @return
*/ */
//@AutoLog(value = "线路车站-轻轨线路-分页列表查询") //@AutoLog(value = "线路车站-轻轨线路-分页列表查询")
@ApiOperation(value = "线路车站-轻轨线路-分页列表查询", notes = "线路车站-轻轨线路-分页列表查询") @ApiOperation(value = "线路车站-轻轨线路-分页列表查询", notes = "线路车站-轻轨线路-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public Result<IPage<LightRail>> queryPageList(LightRail lightRail, public Result<IPage<LightRailQueryVO>> queryPageList(PageSearch<LightRailQueryDTO> dto) {
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, IPage<LightRailQueryVO> pageList = lightRailService.queryPageList(dto);
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<LightRail> queryWrapper = QueryGenerator.initQueryWrapper(lightRail, req.getParameterMap());
Page<LightRail> page = new Page<LightRail>(pageNo, pageSize);
IPage<LightRail> pageList = lightRailService.page(page, queryWrapper);
return Result.OK(pageList); return Result.OK(pageList);
} }
...@@ -98,7 +92,7 @@ public class LightRailController extends JeecgController<LightRail, ILightRailSe ...@@ -98,7 +92,7 @@ public class LightRailController extends JeecgController<LightRail, ILightRailSe
@AutoLog(value = "线路车站-轻轨线路-通过id删除") @AutoLog(value = "线路车站-轻轨线路-通过id删除")
@ApiOperation(value = "线路车站-轻轨线路-通过id删除", notes = "线路车站-轻轨线路-通过id删除") @ApiOperation(value = "线路车站-轻轨线路-通过id删除", notes = "线路车站-轻轨线路-通过id删除")
// @RequiresPermissions("subwayNetwork:t_sn_light_rail:delete") // @RequiresPermissions("subwayNetwork:t_sn_light_rail:delete")
@DeleteMapping(value = "/delete") @GetMapping(value = "/delete")
public Result<String> delete(@RequestParam(name = "id", required = true) String id) { public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
lightRailService.removeById(id); lightRailService.removeById(id);
return Result.OK("删除成功!"); return Result.OK("删除成功!");
...@@ -113,7 +107,7 @@ public class LightRailController extends JeecgController<LightRail, ILightRailSe ...@@ -113,7 +107,7 @@ public class LightRailController extends JeecgController<LightRail, ILightRailSe
@AutoLog(value = "线路车站-轻轨线路-批量删除") @AutoLog(value = "线路车站-轻轨线路-批量删除")
@ApiOperation(value = "线路车站-轻轨线路-批量删除", notes = "线路车站-轻轨线路-批量删除") @ApiOperation(value = "线路车站-轻轨线路-批量删除", notes = "线路车站-轻轨线路-批量删除")
// @RequiresPermissions("subwayNetwork:t_sn_light_rail:deleteBatch") // @RequiresPermissions("subwayNetwork:t_sn_light_rail:deleteBatch")
@DeleteMapping(value = "/deleteBatch") @GetMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) { public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.lightRailService.removeByIds(Arrays.asList(ids.split(","))); this.lightRailService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!"); return Result.OK("批量删除成功!");
......
...@@ -3,6 +3,7 @@ package org.jeecg.modules.subwayNetwork.controller; ...@@ -3,6 +3,7 @@ package org.jeecg.modules.subwayNetwork.controller;
import java.util.Arrays; import java.util.Arrays;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.subwayNetwork.entity.SectionStationMap; import org.jeecg.modules.subwayNetwork.entity.SectionStationMap;
...@@ -22,139 +23,139 @@ import io.swagger.annotations.ApiOperation; ...@@ -22,139 +23,139 @@ import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
/** /**
* @Description: 线路车站-区间站点映射 * @Description: 线路车站-区间站点映射
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2023-06-15 * @Date: 2023-06-15
* @Version: V1.0 * @Version: V1.0
*/ */
@Api(tags="线路车站-区间站点映射") @Api(tags = "线路车站-区间站点映射")
@RestController @RestController
@RequestMapping("/subwayNetwork/sectionStationMap") @RequestMapping("/subwayNetwork/sectionStationMap")
@Slf4j @Slf4j
public class SectionStationMapController extends JeecgController<SectionStationMap, ISectionStationMapService> { public class SectionStationMapController extends JeecgController<SectionStationMap, ISectionStationMapService> {
@Autowired @Autowired
private ISectionStationMapService sectionStationMapService; private ISectionStationMapService sectionStationMapService;
/** /**
* 分页列表查询 * 分页列表查询
* *
* @param sectionStationMap * @param sectionStationMap
* @param pageNo * @param pageNo
* @param pageSize * @param pageSize
* @param req * @param req
* @return * @return
*/ */
//@AutoLog(value = "线路车站-区间站点映射-分页列表查询") //@AutoLog(value = "线路车站-区间站点映射-分页列表查询")
@ApiOperation(value="线路车站-区间站点映射-分页列表查询", notes="线路车站-区间站点映射-分页列表查询") @ApiOperation(value = "线路车站-区间站点映射-分页列表查询", notes = "线路车站-区间站点映射-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public Result<IPage<SectionStationMap>> queryPageList(SectionStationMap sectionStationMap, public Result<IPage<SectionStationMap>> queryPageList(SectionStationMap sectionStationMap,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
QueryWrapper<SectionStationMap> queryWrapper = QueryGenerator.initQueryWrapper(sectionStationMap, req.getParameterMap()); QueryWrapper<SectionStationMap> queryWrapper = QueryGenerator.initQueryWrapper(sectionStationMap, req.getParameterMap());
Page<SectionStationMap> page = new Page<SectionStationMap>(pageNo, pageSize); Page<SectionStationMap> page = new Page<SectionStationMap>(pageNo, pageSize);
IPage<SectionStationMap> pageList = sectionStationMapService.page(page, queryWrapper); IPage<SectionStationMap> pageList = sectionStationMapService.page(page, queryWrapper);
return Result.OK(pageList); return Result.OK(pageList);
} }
/** /**
* 添加 * 添加
* *
* @param sectionStationMap * @param sectionStationMap
* @return * @return
*/ */
@AutoLog(value = "线路车站-区间站点映射-添加") @AutoLog(value = "线路车站-区间站点映射-添加")
@ApiOperation(value="线路车站-区间站点映射-添加", notes="线路车站-区间站点映射-添加") @ApiOperation(value = "线路车站-区间站点映射-添加", notes = "线路车站-区间站点映射-添加")
@RequiresPermissions("subwayNetwork:t_sn_section_station_map:add") // @RequiresPermissions("subwayNetwork:t_sn_section_station_map:add")
@PostMapping(value = "/add") @PostMapping(value = "/add")
public Result<String> add(@RequestBody SectionStationMap sectionStationMap) { public Result<String> add(@RequestBody SectionStationMap sectionStationMap) {
sectionStationMapService.save(sectionStationMap); sectionStationMapService.save(sectionStationMap);
return Result.OK("添加成功!"); return Result.OK("添加成功!");
} }
/** /**
* 编辑 * 编辑
* *
* @param sectionStationMap * @param sectionStationMap
* @return * @return
*/ */
@AutoLog(value = "线路车站-区间站点映射-编辑") @AutoLog(value = "线路车站-区间站点映射-编辑")
@ApiOperation(value="线路车站-区间站点映射-编辑", notes="线路车站-区间站点映射-编辑") @ApiOperation(value = "线路车站-区间站点映射-编辑", notes = "线路车站-区间站点映射-编辑")
@RequiresPermissions("subwayNetwork:t_sn_section_station_map:edit") // @RequiresPermissions("subwayNetwork:t_sn_section_station_map:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) @RequestMapping(value = "/edit", method = RequestMethod.POST)
public Result<String> edit(@RequestBody SectionStationMap sectionStationMap) { public Result<String> edit(@RequestBody SectionStationMap sectionStationMap) {
sectionStationMapService.updateById(sectionStationMap); sectionStationMapService.updateById(sectionStationMap);
return Result.OK("编辑成功!"); return Result.OK("编辑成功!");
} }
/** /**
* 通过id删除 * 通过id删除
* *
* @param id * @param id
* @return * @return
*/ */
@AutoLog(value = "线路车站-区间站点映射-通过id删除") @AutoLog(value = "线路车站-区间站点映射-通过id删除")
@ApiOperation(value="线路车站-区间站点映射-通过id删除", notes="线路车站-区间站点映射-通过id删除") @ApiOperation(value = "线路车站-区间站点映射-通过id删除", notes = "线路车站-区间站点映射-通过id删除")
@RequiresPermissions("subwayNetwork:t_sn_section_station_map:delete") // @RequiresPermissions("subwayNetwork:t_sn_section_station_map:delete")
@DeleteMapping(value = "/delete") @GetMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) { public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
sectionStationMapService.removeById(id); sectionStationMapService.removeById(id);
return Result.OK("删除成功!"); return Result.OK("删除成功!");
} }
/** /**
* 批量删除 * 批量删除
* *
* @param ids * @param ids
* @return * @return
*/ */
@AutoLog(value = "线路车站-区间站点映射-批量删除") @AutoLog(value = "线路车站-区间站点映射-批量删除")
@ApiOperation(value="线路车站-区间站点映射-批量删除", notes="线路车站-区间站点映射-批量删除") @ApiOperation(value = "线路车站-区间站点映射-批量删除", notes = "线路车站-区间站点映射-批量删除")
@RequiresPermissions("subwayNetwork:t_sn_section_station_map:deleteBatch") @RequiresPermissions("subwayNetwork:t_sn_section_station_map:deleteBatch")
@DeleteMapping(value = "/deleteBatch") @GetMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.sectionStationMapService.removeByIds(Arrays.asList(ids.split(","))); this.sectionStationMapService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!"); return Result.OK("批量删除成功!");
} }
/** /**
* 通过id查询 * 通过id查询
* *
* @param id * @param id
* @return * @return
*/ */
//@AutoLog(value = "线路车站-区间站点映射-通过id查询") //@AutoLog(value = "线路车站-区间站点映射-通过id查询")
@ApiOperation(value="线路车站-区间站点映射-通过id查询", notes="线路车站-区间站点映射-通过id查询") @ApiOperation(value = "线路车站-区间站点映射-通过id查询", notes = "线路车站-区间站点映射-通过id查询")
@GetMapping(value = "/queryById") @GetMapping(value = "/queryById")
public Result<SectionStationMap> queryById(@RequestParam(name="id",required=true) String id) { public Result<SectionStationMap> queryById(@RequestParam(name = "id", required = true) String id) {
SectionStationMap sectionStationMap = sectionStationMapService.getById(id); SectionStationMap sectionStationMap = sectionStationMapService.getById(id);
if(sectionStationMap==null) { if (sectionStationMap == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
return Result.OK(sectionStationMap); return Result.OK(sectionStationMap);
} }
/** /**
* 导出excel * 导出excel
* *
* @param request * @param request
* @param sectionStationMap * @param sectionStationMap
*/ */
@RequiresPermissions("subwayNetwork:t_sn_section_station_map:exportXls") // @RequiresPermissions("subwayNetwork:t_sn_section_station_map:exportXls")
@RequestMapping(value = "/exportXls") @RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, SectionStationMap sectionStationMap) { public ModelAndView exportXls(HttpServletRequest request, SectionStationMap sectionStationMap) {
return super.exportXls(request, sectionStationMap, SectionStationMap.class, "线路车站-区间站点映射"); return super.exportXls(request, sectionStationMap, SectionStationMap.class, "线路车站-区间站点映射");
} }
/** /**
* 通过excel导入数据 * 通过excel导入数据
* *
* @param request * @param request
* @param response * @param response
* @return * @return
*/ */
@RequiresPermissions("subwayNetwork:t_sn_section_station_map:importExcel") // @RequiresPermissions("subwayNetwork:t_sn_section_station_map:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST) @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, SectionStationMap.class); return super.importExcel(request, response, SectionStationMap.class);
......
package org.jeecg.modules.subwayNetwork.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "线路DTO")
public class LightRailQueryDTO {
@ApiModelProperty(value = "线路code")
private String railLineCode;
@ApiModelProperty(value = "状态")
private String status;
}
...@@ -4,10 +4,8 @@ import java.io.Serializable; ...@@ -4,10 +4,8 @@ import java.io.Serializable;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.util.Date; import java.util.Date;
import java.math.BigDecimal; import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data; import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
...@@ -21,47 +19,64 @@ import lombok.experimental.Accessors; ...@@ -21,47 +19,64 @@ import lombok.experimental.Accessors;
/** /**
* @Description: 线路车站-轻轨线路 * @Description: 线路车站-轻轨线路
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2023-06-14 * @Date: 2023-06-14
* @Version: V1.0 * @Version: V1.0
*/ */
@Data @Data
@TableName("t_sn_light_rail") @TableName("t_sn_light_rail")
@Accessors(chain = true) @Accessors(chain = true)
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@ApiModel(value="t_sn_light_rail对象", description="线路车站-轻轨线路") @ApiModel(value = "t_sn_light_rail对象", description = "线路车站-轻轨线路")
public class LightRail implements Serializable { public class LightRail implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**主键*/ /**
@TableId(type = IdType.ASSIGN_ID) * 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键") @ApiModelProperty(value = "主键")
private java.lang.String id; private java.lang.String id;
/**创建人*/ /**
* 创建人
*/
@ApiModelProperty(value = "创建人") @ApiModelProperty(value = "创建人")
private java.lang.String createBy; private java.lang.String createBy;
/**创建日期*/ /**
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") * 创建日期
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") */
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期") @ApiModelProperty(value = "创建日期")
private java.util.Date createTime; private java.util.Date createTime;
/**更新人*/ /**
* 更新人
*/
@ApiModelProperty(value = "更新人") @ApiModelProperty(value = "更新人")
private java.lang.String updateBy; private java.lang.String updateBy;
/**更新日期*/ /**
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") * 更新日期
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") */
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期") @ApiModelProperty(value = "更新日期")
private java.util.Date updateTime; private java.util.Date updateTime;
/**线路名称*/ /**
@Excel(name = "线路名称", width = 15) * 线路名称
*/
@Excel(name = "线路名称", width = 15)
@ApiModelProperty(value = "线路名称") @ApiModelProperty(value = "线路名称")
private java.lang.String railLineName; private java.lang.String railLineName;
/**线路code*/ /**
@Excel(name = "线路code", width = 15) * 线路code
*/
@Excel(name = "线路code", width = 15)
@ApiModelProperty(value = "线路code") @ApiModelProperty(value = "线路code")
private java.lang.String railLineCode; private java.lang.String railLineCode;
/**状态*/ /**
@Excel(name = "状态", width = 15) * 状态
*/
@Excel(name = "状态", width = 15)
@ApiModelProperty(value = "状态") @ApiModelProperty(value = "状态")
private java.lang.String status; private java.lang.String status;
} }
package org.jeecg.modules.subwayNetwork.mapper; package org.jeecg.modules.subwayNetwork.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.subwayNetwork.dto.LightRailQueryDTO;
import org.jeecg.modules.subwayNetwork.entity.LightRail; import org.jeecg.modules.subwayNetwork.entity.LightRail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.subwayNetwork.vo.LightRailQueryVO;
/** /**
* @Description: 线路车站-轻轨线路 * @Description: 线路车站-轻轨线路
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2023-06-14 * @Date: 2023-06-14
* @Version: V1.0 * @Version: V1.0
*/ */
public interface LightRailMapper extends BaseMapper<LightRail> { public interface LightRailMapper extends BaseMapper<LightRail> {
IPage<LightRailQueryVO> queryPageList(IPage<LightRailQueryVO> page, LightRailQueryDTO query);
} }
...@@ -2,4 +2,25 @@ ...@@ -2,4 +2,25 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.subwayNetwork.mapper.LightRailMapper"> <mapper namespace="org.jeecg.modules.subwayNetwork.mapper.LightRailMapper">
<select id="queryPageList" resultType="org.jeecg.modules.subwayNetwork.vo.LightRailQueryVO">
SELECT
t1.create_by,
t1.create_time,
t1.id,
t1.rail_line_code,
t1.rail_line_name,
t1.status,
t1.update_by,
t1.update_time,
count(t2.id) subwaySectionNum,
count(t3.id) trainStationNum,
sum(t3.end_mileage) lineMileage
FROM
t_sn_light_rail t1
LEFT JOIN t_sn_subway_section t2 ON t1.id = t2.rail_id
LEFT JOIN t_sn_train_station t3 ON t1.id = t3.light_rail_id
WHERE 1=1
GROUP BY t1.id
</select>
</mapper> </mapper>
\ No newline at end of file
package org.jeecg.modules.subwayNetwork.service; package org.jeecg.modules.subwayNetwork.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.common.api.dto.PageSearch;
import org.jeecg.modules.subwayNetwork.dto.LightRailQueryDTO;
import org.jeecg.modules.subwayNetwork.entity.LightRail; import org.jeecg.modules.subwayNetwork.entity.LightRail;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.subwayNetwork.vo.LightRailQueryVO;
/** /**
* @Description: 线路车站-轻轨线路 * @Description: 线路车站-轻轨线路
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2023-06-14 * @Date: 2023-06-14
* @Version: V1.0 * @Version: V1.0
*/ */
public interface ILightRailService extends IService<LightRail> { public interface ILightRailService extends IService<LightRail> {
/**
* 分页查询
*
* @param dto
* @return
*/
IPage<LightRailQueryVO> queryPageList(PageSearch<LightRailQueryDTO> dto);
} }
package org.jeecg.modules.subwayNetwork.service.impl; package org.jeecg.modules.subwayNetwork.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.api.dto.PageSearch;
import org.jeecg.modules.subwayNetwork.dto.LightRailQueryDTO;
import org.jeecg.modules.subwayNetwork.entity.LightRail; import org.jeecg.modules.subwayNetwork.entity.LightRail;
import org.jeecg.modules.subwayNetwork.entity.SectionStationMap;
import org.jeecg.modules.subwayNetwork.mapper.LightRailMapper; import org.jeecg.modules.subwayNetwork.mapper.LightRailMapper;
import org.jeecg.modules.subwayNetwork.service.ILightRailService; import org.jeecg.modules.subwayNetwork.service.ILightRailService;
import org.jeecg.modules.subwayNetwork.vo.LightRailQueryVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/** /**
* @Description: 线路车站-轻轨线路 * @Description: 线路车站-轻轨线路
* @Author: jeecg-boot * @Author: jeecg-boot
* @Date: 2023-06-14 * @Date: 2023-06-14
* @Version: V1.0 * @Version: V1.0
*/ */
@Service @Service
public class LightRailServiceImpl extends ServiceImpl<LightRailMapper, LightRail> implements ILightRailService { public class LightRailServiceImpl extends ServiceImpl<LightRailMapper, LightRail> implements ILightRailService {
@Override
public IPage<LightRailQueryVO> queryPageList(PageSearch<LightRailQueryDTO> dto) {
IPage<LightRailQueryVO> page = new Page<>(dto.getPageNo(), dto.getPageSize());
page = this.baseMapper.queryPageList(page, dto.getQuery());
return page;
}
} }
package org.jeecg.modules.subwayNetwork.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ApiModel(value = "线路VO")
public class LightRailQueryVO {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private String id;
@ApiModelProperty(value = "创建人")
private String createBy;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private Date createTime;
@ApiModelProperty(value = "更新人")
private String updateBy;
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private Date updateTime;
@ApiModelProperty(value = "线路名称")
private java.lang.String railLineName;
@ApiModelProperty(value = "线路code")
private java.lang.String railLineCode;
@ApiModelProperty(value = "状态")
private java.lang.String status;
@ApiModelProperty(value = "区间数量")
private Integer subwaySectionNum;
@ApiModelProperty(value = "车站数量")
private Integer trainStationNum;
@ApiModelProperty(value = "线路里程")
private BigDecimal lineMileage;
}
...@@ -44,691 +44,704 @@ import java.util.*; ...@@ -44,691 +44,704 @@ import java.util.*;
*/ */
@RestController @RestController
@RequestMapping("/sys") @RequestMapping("/sys")
@Api(tags="用户登录") @Api(tags = "用户登录")
@Slf4j @Slf4j
public class LoginController { public class LoginController {
@Autowired @Autowired
private ISysUserService sysUserService; private ISysUserService sysUserService;
@Autowired @Autowired
private ISysPermissionService sysPermissionService; private ISysPermissionService sysPermissionService;
@Autowired @Autowired
private SysBaseApiImpl sysBaseApi; private SysBaseApiImpl sysBaseApi;
@Autowired @Autowired
private ISysLogService logService; private ISysLogService logService;
@Autowired @Autowired
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Autowired @Autowired
private ISysDepartService sysDepartService; private ISysDepartService sysDepartService;
@Autowired @Autowired
private ISysTenantService sysTenantService; private ISysTenantService sysTenantService;
@Autowired @Autowired
private ISysDictService sysDictService; private ISysDictService sysDictService;
@Resource @Resource
private BaseCommonService baseCommonService; private BaseCommonService baseCommonService;
@Autowired @Autowired
private JeecgBaseConfig jeecgBaseConfig; private JeecgBaseConfig jeecgBaseConfig;
private final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890"; private final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890";
@ApiOperation("登录接口") @ApiOperation("登录接口")
@RequestMapping(value = "/login", method = RequestMethod.POST) @RequestMapping(value = "/login", method = RequestMethod.POST)
public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel){ public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) {
Result<JSONObject> result = new Result<JSONObject>(); Result<JSONObject> result = new Result<JSONObject>();
String username = sysLoginModel.getUsername(); String username = sysLoginModel.getUsername();
String password = sysLoginModel.getPassword(); String password = sysLoginModel.getPassword();
//update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
if(isLoginFailOvertimes(username)){ if (isLoginFailOvertimes(username)) {
return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!");
} }
//update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题 //update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
//前端密码加密,后端进行密码解密 //前端密码加密,后端进行密码解密
//password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密 //password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密
//update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题 //update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题
//update-begin-author:taoyan date:20190828 for:校验验证码 //update-begin-author:taoyan date:20190828 for:校验验证码
String captcha = sysLoginModel.getCaptcha(); String captcha = sysLoginModel.getCaptcha();
if(captcha==null){ if (captcha == null) {
result.error500("验证码无效"); result.error500("验证码无效");
return result; return result;
} }
String lowerCaseCaptcha = captcha.toLowerCase(); String lowerCaseCaptcha = captcha.toLowerCase();
//update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
// 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可 // 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可
String origin = lowerCaseCaptcha+sysLoginModel.getCheckKey()+jeecgBaseConfig.getSignatureSecret(); String origin = lowerCaseCaptcha + sysLoginModel.getCheckKey() + jeecgBaseConfig.getSignatureSecret();
String realKey = Md5Util.md5Encode(origin, "utf-8"); String realKey = Md5Util.md5Encode(origin, "utf-8");
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
Object checkCode = redisUtil.get(realKey); Object checkCode = redisUtil.get(realKey);
//当进入登录页时,有一定几率出现验证码错误 #1714 //当进入登录页时,有一定几率出现验证码错误 #1714
if(checkCode==null || !checkCode.toString().equals(lowerCaseCaptcha)) { if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) {
log.warn("验证码错误,key= {} , Ui checkCode= {}, Redis checkCode = {}", sysLoginModel.getCheckKey(), lowerCaseCaptcha, checkCode); log.warn("验证码错误,key= {} , Ui checkCode= {}, Redis checkCode = {}", sysLoginModel.getCheckKey(), lowerCaseCaptcha, checkCode);
result.error500("验证码错误"); result.error500("验证码错误");
// 改成特殊的code 便于前端判断 // 改成特殊的code 便于前端判断
result.setCode(HttpStatus.PRECONDITION_FAILED.value()); result.setCode(HttpStatus.PRECONDITION_FAILED.value());
return result; return result;
} }
//update-end-author:taoyan date:20190828 for:校验验证码 //update-end-author:taoyan date:20190828 for:校验验证码
//1. 校验用户是否有效 //1. 校验用户是否有效
//update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false //update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUser::getUsername,username); queryWrapper.eq(SysUser::getUsername, username);
SysUser sysUser = sysUserService.getOne(queryWrapper); SysUser sysUser = sysUserService.getOne(queryWrapper);
//update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false //update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false
result = sysUserService.checkUserIsEffective(sysUser); result = sysUserService.checkUserIsEffective(sysUser);
if(!result.isSuccess()) { if (!result.isSuccess()) {
return result; return result;
} }
//2. 校验用户名或密码是否正确 //2. 校验用户名或密码是否正确
String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt());
String syspassword = sysUser.getPassword(); String syspassword = sysUser.getPassword();
if (!syspassword.equals(userpassword)) { if (!syspassword.equals(userpassword)) {
//update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
addLoginFailOvertimes(username); addLoginFailOvertimes(username);
//update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
result.error500("用户名或密码错误"); result.error500("用户名或密码错误");
return result; return result;
} }
//用户登录信息 //用户登录信息
userInfo(sysUser, result); userInfo(sysUser, result);
//update-begin--Author:liusq Date:20210126 for:登录成功,删除redis中的验证码 //update-begin--Author:liusq Date:20210126 for:登录成功,删除redis中的验证码
redisUtil.del(realKey); redisUtil.del(realKey);
//update-begin--Author:liusq Date:20210126 for:登录成功,删除redis中的验证码 //update-begin--Author:liusq Date:20210126 for:登录成功,删除redis中的验证码
redisUtil.del(CommonConstant.LOGIN_FAIL + username); redisUtil.del(CommonConstant.LOGIN_FAIL + username);
LoginUser loginUser = new LoginUser(); LoginUser loginUser = new LoginUser();
BeanUtils.copyProperties(sysUser, loginUser); BeanUtils.copyProperties(sysUser, loginUser);
baseCommonService.addLog("用户名: " + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null,loginUser); baseCommonService.addLog("用户名: " + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser);
//update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员 //update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员
return result; return result;
} }
/** /**
* 【vue3专用】获取用户信息 * 【vue3专用】获取用户信息
*/ */
@GetMapping("/user/getUserInfo") @GetMapping("/user/getUserInfo")
public Result<JSONObject> getUserInfo(HttpServletRequest request){ public Result<JSONObject> getUserInfo(HttpServletRequest request) {
Result<JSONObject> result = new Result<JSONObject>(); Result<JSONObject> result = new Result<JSONObject>();
String username = JwtUtil.getUserNameByToken(request); String username = JwtUtil.getUserNameByToken(request);
if(oConvertUtils.isNotEmpty(username)) { if (oConvertUtils.isNotEmpty(username)) {
// 根据用户名查询用户信息 // 根据用户名查询用户信息
SysUser sysUser = sysUserService.getUserByName(username); SysUser sysUser = sysUserService.getUserByName(username);
JSONObject obj=new JSONObject(); JSONObject obj = new JSONObject();
//update-begin---author:scott ---date:2022-06-20 for:vue3前端,支持自定义首页----------- //update-begin---author:scott ---date:2022-06-20 for:vue3前端,支持自定义首页-----------
String version = request.getHeader(CommonConstant.VERSION); String version = request.getHeader(CommonConstant.VERSION);
//update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑----------- //update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑-----------
SysRoleIndex roleIndex = sysUserService.getDynamicIndexByUserRole(username, version); SysRoleIndex roleIndex = sysUserService.getDynamicIndexByUserRole(username, version);
if (oConvertUtils.isNotEmpty(version) && roleIndex != null && oConvertUtils.isNotEmpty(roleIndex.getUrl())) { if (oConvertUtils.isNotEmpty(version) && roleIndex != null && oConvertUtils.isNotEmpty(roleIndex.getUrl())) {
String homePath = roleIndex.getUrl(); String homePath = roleIndex.getUrl();
if (!homePath.startsWith(SymbolConstant.SINGLE_SLASH)) { if (!homePath.startsWith(SymbolConstant.SINGLE_SLASH)) {
homePath = SymbolConstant.SINGLE_SLASH + homePath; homePath = SymbolConstant.SINGLE_SLASH + homePath;
} }
sysUser.setHomePath(homePath); sysUser.setHomePath(homePath);
} }
//update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑----------- //update-begin---author:liusq ---date:2022-06-29 for:接口返回值修改,同步修改这里的判断逻辑-----------
//update-end---author:scott ---date::2022-06-20 for:vue3前端,支持自定义首页-------------- //update-end---author:scott ---date::2022-06-20 for:vue3前端,支持自定义首页--------------
obj.put("userInfo",sysUser); obj.put("userInfo", sysUser);
obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
result.setResult(obj); result.setResult(obj);
result.success(""); result.success("");
} }
return result; return result;
} }
/** /**
* 退出登录 * 退出登录
* @param request *
* @param response * @param request
* @return * @param response
*/ * @return
@RequestMapping(value = "/logout") */
public Result<Object> logout(HttpServletRequest request,HttpServletResponse response) { @RequestMapping(value = "/logout")
//用户退出逻辑 public Result<Object> logout(HttpServletRequest request, HttpServletResponse response) {
String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); //用户退出逻辑
if(oConvertUtils.isEmpty(token)) { String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN);
return Result.error("退出登录失败!"); if (oConvertUtils.isEmpty(token)) {
} return Result.error("退出登录失败!");
String username = JwtUtil.getUsername(token); }
LoginUser sysUser = sysBaseApi.getUserByName(username); String username = JwtUtil.getUsername(token);
if(sysUser!=null) { LoginUser sysUser = sysBaseApi.getUserByName(username);
//update-begin--Author:wangshuai Date:20200714 for:登出日志没有记录人员 if (sysUser != null) {
baseCommonService.addLog("用户名: "+sysUser.getRealname()+",退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser); //update-begin--Author:wangshuai Date:20200714 for:登出日志没有记录人员
//update-end--Author:wangshuai Date:20200714 for:登出日志没有记录人员 baseCommonService.addLog("用户名: " + sysUser.getRealname() + ",退出成功!", CommonConstant.LOG_TYPE_1, null, sysUser);
log.info(" 用户名: "+sysUser.getRealname()+",退出成功! "); //update-end--Author:wangshuai Date:20200714 for:登出日志没有记录人员
//清空用户登录Token缓存 log.info(" 用户名: " + sysUser.getRealname() + ",退出成功! ");
redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token); //清空用户登录Token缓存
//清空用户登录Shiro权限缓存 redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token);
redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + sysUser.getId()); //清空用户登录Shiro权限缓存
//清空用户的缓存信息(包括部门信息),例如sys:cache:user::<username> redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + sysUser.getId());
redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername())); //清空用户的缓存信息(包括部门信息),例如sys:cache:user::<username>
//调用shiro的logout redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername()));
SecurityUtils.getSubject().logout(); //调用shiro的logout
return Result.ok("退出登录成功!"); SecurityUtils.getSubject().logout();
}else { return Result.ok("退出登录成功!");
return Result.error("Token无效!"); } else {
} return Result.error("Token无效!");
} }
}
/**
* 获取访问量 /**
* @return * 获取访问量
*/ *
@GetMapping("loginfo") * @return
public Result<JSONObject> loginfo() { */
Result<JSONObject> result = new Result<JSONObject>(); @GetMapping("loginfo")
JSONObject obj = new JSONObject(); public Result<JSONObject> loginfo() {
//update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 Result<JSONObject> result = new Result<JSONObject>();
// 获取一天的开始和结束时间 JSONObject obj = new JSONObject();
Calendar calendar = new GregorianCalendar(); //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数
calendar.set(Calendar.HOUR_OF_DAY, 0); // 获取一天的开始和结束时间
calendar.set(Calendar.MINUTE, 0); Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.MINUTE, 0);
Date dayStart = calendar.getTime(); calendar.set(Calendar.SECOND, 0);
calendar.add(Calendar.DATE, 1); calendar.set(Calendar.MILLISECOND, 0);
Date dayEnd = calendar.getTime(); Date dayStart = calendar.getTime();
// 获取系统访问记录 calendar.add(Calendar.DATE, 1);
Long totalVisitCount = logService.findTotalVisitCount(); Date dayEnd = calendar.getTime();
obj.put("totalVisitCount", totalVisitCount); // 获取系统访问记录
Long todayVisitCount = logService.findTodayVisitCount(dayStart,dayEnd); Long totalVisitCount = logService.findTotalVisitCount();
obj.put("todayVisitCount", todayVisitCount); obj.put("totalVisitCount", totalVisitCount);
Long todayIp = logService.findTodayIp(dayStart,dayEnd); Long todayVisitCount = logService.findTodayVisitCount(dayStart, dayEnd);
//update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 obj.put("todayVisitCount", todayVisitCount);
obj.put("todayIp", todayIp); Long todayIp = logService.findTodayIp(dayStart, dayEnd);
result.setResult(obj); //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数
result.success("登录成功"); obj.put("todayIp", todayIp);
return result; result.setResult(obj);
} result.success("登录成功");
return result;
/** }
* 获取访问量
* @return /**
*/ * 获取访问量
@GetMapping("visitInfo") *
public Result<List<Map<String,Object>>> visitInfo() { * @return
Result<List<Map<String,Object>>> result = new Result<List<Map<String,Object>>>(); */
Calendar calendar = new GregorianCalendar(); @GetMapping("visitInfo")
calendar.set(Calendar.HOUR_OF_DAY,0); public Result<List<Map<String, Object>>> visitInfo() {
calendar.set(Calendar.MINUTE,0); Result<List<Map<String, Object>>> result = new Result<List<Map<String, Object>>>();
calendar.set(Calendar.SECOND,0); Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.MILLISECOND,0); calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.DAY_OF_MONTH, 1); calendar.add(Calendar.DAY_OF_MONTH, 1);
Date dayEnd = calendar.getTime(); Date dayEnd = calendar.getTime();
calendar.add(Calendar.DAY_OF_MONTH, -7); calendar.add(Calendar.DAY_OF_MONTH, -7);
Date dayStart = calendar.getTime(); Date dayStart = calendar.getTime();
List<Map<String,Object>> list = logService.findVisitCount(dayStart, dayEnd); List<Map<String, Object>> list = logService.findVisitCount(dayStart, dayEnd);
result.setResult(oConvertUtils.toLowerCasePageList(list)); result.setResult(oConvertUtils.toLowerCasePageList(list));
return result; return result;
} }
/** /**
* 登陆成功选择用户当前部门 * 登陆成功选择用户当前部门
* @param user *
* @return * @param user
*/ * @return
@RequestMapping(value = "/selectDepart", method = RequestMethod.PUT) */
public Result<JSONObject> selectDepart(@RequestBody SysUser user) { @RequestMapping(value = "/selectDepart", method = RequestMethod.PUT)
Result<JSONObject> result = new Result<JSONObject>(); public Result<JSONObject> selectDepart(@RequestBody SysUser user) {
String username = user.getUsername(); Result<JSONObject> result = new Result<JSONObject>();
if(oConvertUtils.isEmpty(username)) { String username = user.getUsername();
LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); if (oConvertUtils.isEmpty(username)) {
username = sysUser.getUsername(); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
} username = sysUser.getUsername();
}
//获取登录部门
String orgCode= user.getOrgCode(); //获取登录部门
//获取登录租户 String orgCode = user.getOrgCode();
Integer tenantId = user.getLoginTenantId(); //获取登录租户
this.sysUserService.updateUserDepart(username, orgCode,tenantId); Integer tenantId = user.getLoginTenantId();
SysUser sysUser = sysUserService.getUserByName(username); this.sysUserService.updateUserDepart(username, orgCode, tenantId);
JSONObject obj = new JSONObject(); SysUser sysUser = sysUserService.getUserByName(username);
obj.put("userInfo", sysUser); JSONObject obj = new JSONObject();
result.setResult(obj); obj.put("userInfo", sysUser);
return result; result.setResult(obj);
} return result;
}
/**
* 短信登录接口 /**
* * 短信登录接口
* @param jsonObject *
* @return * @param jsonObject
*/ * @return
@PostMapping(value = "/sms") */
public Result<String> sms(@RequestBody JSONObject jsonObject) { @PostMapping(value = "/sms")
Result<String> result = new Result<String>(); public Result<String> sms(@RequestBody JSONObject jsonObject) {
String mobile = jsonObject.get("mobile").toString(); Result<String> result = new Result<String>();
//手机号模式 登录模式: "2" 注册模式: "1" String mobile = jsonObject.get("mobile").toString();
String smsmode=jsonObject.get("smsmode").toString(); //手机号模式 登录模式: "2" 注册模式: "1"
log.info(mobile); String smsmode = jsonObject.get("smsmode").toString();
if(oConvertUtils.isEmpty(mobile)){ log.info(mobile);
result.setMessage("手机号不允许为空!"); if (oConvertUtils.isEmpty(mobile)) {
result.setSuccess(false); result.setMessage("手机号不允许为空!");
return result; result.setSuccess(false);
} return result;
}
//update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE+mobile; //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
Object object = redisUtil.get(redisKey); String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + mobile;
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 Object object = redisUtil.get(redisKey);
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
if (object != null) {
result.setMessage("验证码10分钟内,仍然有效!"); if (object != null) {
result.setSuccess(false); result.setMessage("验证码10分钟内,仍然有效!");
return result; result.setSuccess(false);
} return result;
}
//随机数
String captcha = RandomUtil.randomNumbers(6); //随机数
JSONObject obj = new JSONObject(); String captcha = RandomUtil.randomNumbers(6);
obj.put("code", captcha); JSONObject obj = new JSONObject();
try { obj.put("code", captcha);
boolean b = false; try {
//注册模板 boolean b = false;
if (CommonConstant.SMS_TPL_TYPE_1.equals(smsmode)) { //注册模板
SysUser sysUser = sysUserService.getUserByPhone(mobile); if (CommonConstant.SMS_TPL_TYPE_1.equals(smsmode)) {
if(sysUser!=null) { SysUser sysUser = sysUserService.getUserByPhone(mobile);
result.error500(" 手机号已经注册,请直接登录!"); if (sysUser != null) {
baseCommonService.addLog("手机号已经注册,请直接登录!", CommonConstant.LOG_TYPE_1, null); result.error500(" 手机号已经注册,请直接登录!");
return result; baseCommonService.addLog("手机号已经注册,请直接登录!", CommonConstant.LOG_TYPE_1, null);
} return result;
b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.REGISTER_TEMPLATE_CODE); }
}else { b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.REGISTER_TEMPLATE_CODE);
//登录模式,校验用户有效性 } else {
SysUser sysUser = sysUserService.getUserByPhone(mobile); //登录模式,校验用户有效性
result = sysUserService.checkUserIsEffective(sysUser); SysUser sysUser = sysUserService.getUserByPhone(mobile);
if(!result.isSuccess()) { result = sysUserService.checkUserIsEffective(sysUser);
String message = result.getMessage(); if (!result.isSuccess()) {
String userNotExist="该用户不存在,请注册"; String message = result.getMessage();
if(userNotExist.equals(message)){ String userNotExist = "该用户不存在,请注册";
result.error500("该用户不存在或未绑定手机号"); if (userNotExist.equals(message)) {
} result.error500("该用户不存在或未绑定手机号");
return result; }
} return result;
}
/**
* smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 /**
*/ * smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板
if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) { */
//登录模板 if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) {
b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE); //登录模板
} else if(CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) { b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE);
//忘记密码模板 } else if (CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) {
b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); //忘记密码模板
} b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE);
} }
}
if (b == false) {
result.setMessage("短信验证码发送失败,请稍后重试"); if (b == false) {
result.setSuccess(false); result.setMessage("短信验证码发送失败,请稍后重试");
return result; result.setSuccess(false);
} return result;
}
//update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//验证码10分钟内有效 //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
redisUtil.set(redisKey, captcha, 600); //验证码10分钟内有效
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 redisUtil.set(redisKey, captcha, 600);
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//update-begin--Author:scott Date:20190812 for:issues#391
//result.setResult(captcha); //update-begin--Author:scott Date:20190812 for:issues#391
//update-end--Author:scott Date:20190812 for:issues#391 //result.setResult(captcha);
result.setSuccess(true); //update-end--Author:scott Date:20190812 for:issues#391
result.setSuccess(true);
} catch (ClientException e) {
e.printStackTrace(); } catch (ClientException e) {
result.error500(" 短信接口未配置,请联系管理员!"); e.printStackTrace();
return result; result.error500(" 短信接口未配置,请联系管理员!");
} return result;
return result; }
} return result;
}
/**
* 手机号登录接口 /**
* * 手机号登录接口
* @param jsonObject *
* @return * @param jsonObject
*/ * @return
@ApiOperation("手机号登录接口") */
@PostMapping("/phoneLogin") @ApiOperation("手机号登录接口")
public Result<JSONObject> phoneLogin(@RequestBody JSONObject jsonObject) { @PostMapping("/phoneLogin")
Result<JSONObject> result = new Result<JSONObject>(); public Result<JSONObject> phoneLogin(@RequestBody JSONObject jsonObject) {
String phone = jsonObject.getString("mobile"); Result<JSONObject> result = new Result<JSONObject>();
//update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 String phone = jsonObject.getString("mobile");
if(isLoginFailOvertimes(phone)){ //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); if (isLoginFailOvertimes(phone)) {
} return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!");
//update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 }
//校验用户有效性 //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
SysUser sysUser = sysUserService.getUserByPhone(phone); //校验用户有效性
result = sysUserService.checkUserIsEffective(sysUser); SysUser sysUser = sysUserService.getUserByPhone(phone);
if(!result.isSuccess()) { result = sysUserService.checkUserIsEffective(sysUser);
return result; if (!result.isSuccess()) {
} return result;
}
String smscode = jsonObject.getString("captcha");
String smscode = jsonObject.getString("captcha");
//update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE+phone; //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
Object code = redisUtil.get(redisKey); String redisKey = CommonConstant.PHONE_REDIS_KEY_PRE + phone;
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 Object code = redisUtil.get(redisKey);
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
if (!smscode.equals(code)) {
//update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 if (!smscode.equals(code)) {
addLoginFailOvertimes(phone); //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
//update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 addLoginFailOvertimes(phone);
result.setMessage("手机验证码错误"); //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
return result; result.setMessage("手机验证码错误");
} return result;
//用户信息 }
userInfo(sysUser, result); //用户信息
//添加日志 userInfo(sysUser, result);
baseCommonService.addLog("用户名: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null); //添加日志
baseCommonService.addLog("用户名: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null);
return result;
} return result;
}
/**
* 用户信息 /**
* * 用户信息
* @param sysUser *
* @param result * @param sysUser
* @return * @param result
*/ * @return
private Result<JSONObject> userInfo(SysUser sysUser, Result<JSONObject> result) { */
String username = sysUser.getUsername(); private Result<JSONObject> userInfo(SysUser sysUser, Result<JSONObject> result) {
String syspassword = sysUser.getPassword(); String username = sysUser.getUsername();
// 获取用户部门信息 String syspassword = sysUser.getPassword();
JSONObject obj = new JSONObject(new LinkedHashMap<>()); // 获取用户部门信息
JSONObject obj = new JSONObject(new LinkedHashMap<>());
//1.生成token
String token = JwtUtil.sign(username, syspassword); //1.生成token
// 设置token缓存有效时间 String token = JwtUtil.sign(username, syspassword);
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); // 设置token缓存有效时间
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
obj.put("token", token); redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
obj.put("token", token);
//2.设置登录租户
Result<JSONObject> loginTenantError = sysUserService.setLoginTenant(sysUser, obj, username,result); //2.设置登录租户
if (loginTenantError != null) { Result<JSONObject> loginTenantError = sysUserService.setLoginTenant(sysUser, obj, username, result);
return loginTenantError; if (loginTenantError != null) {
} return loginTenantError;
}
//3.设置登录用户信息
obj.put("userInfo", sysUser); //3.设置登录用户信息
obj.put("userInfo", sysUser);
//4.设置登录部门
List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId()); //4.设置登录部门
obj.put("departs", departs); List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
if (departs == null || departs.size() == 0) { obj.put("departs", departs);
obj.put("multi_depart", 0); if (departs == null || departs.size() == 0) {
} else if (departs.size() == 1) { obj.put("multi_depart", 0);
sysUserService.updateUserDepart(username, departs.get(0).getOrgCode(),null); } else if (departs.size() == 1) {
obj.put("multi_depart", 1); sysUserService.updateUserDepart(username, departs.get(0).getOrgCode(), null);
} else { obj.put("multi_depart", 1);
//查询当前是否有登录部门 } else {
// update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 //查询当前是否有登录部门
SysUser sysUserById = sysUserService.getById(sysUser.getId()); // update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去
if(oConvertUtils.isEmpty(sysUserById.getOrgCode())){ SysUser sysUserById = sysUserService.getById(sysUser.getId());
sysUserService.updateUserDepart(username, departs.get(0).getOrgCode(),null); if (oConvertUtils.isEmpty(sysUserById.getOrgCode())) {
} sysUserService.updateUserDepart(username, departs.get(0).getOrgCode(), null);
// update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 }
obj.put("multi_depart", 2); // update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去
} obj.put("multi_depart", 2);
obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); }
result.setResult(obj); obj.put("sysAllDictItems", sysDictService.queryAllDictItems());
result.success("登录成功"); result.setResult(obj);
return result; result.success("登录成功");
} return result;
}
/**
* 获取加密字符串 /**
* @return * 获取加密字符串
*/ *
@GetMapping(value = "/getEncryptedString") * @return
public Result<Map<String,String>> getEncryptedString(){ */
Result<Map<String,String>> result = new Result<Map<String,String>>(); @GetMapping(value = "/getEncryptedString")
Map<String,String> map = new HashMap(5); public Result<Map<String, String>> getEncryptedString() {
map.put("key", EncryptedString.key); Result<Map<String, String>> result = new Result<Map<String, String>>();
map.put("iv",EncryptedString.iv); Map<String, String> map = new HashMap(5);
result.setResult(map); map.put("key", EncryptedString.key);
return result; map.put("iv", EncryptedString.iv);
} result.setResult(map);
return result;
/** }
* 后台生成图形验证码 :有效
* @param response /**
* @param key * 后台生成图形验证码 :有效
*/ *
@ApiOperation("获取验证码") * @param response
@GetMapping(value = "/randomImage/{key}") * @param key
public Result<String> randomImage(HttpServletResponse response,@PathVariable("key") String key){ */
Result<String> res = new Result<String>(); @ApiOperation("获取验证码")
try { @GetMapping(value = "/randomImage/{key}")
//生成验证码 public Result<String> randomImage(HttpServletResponse response, @PathVariable("key") String key) {
String code = RandomUtil.randomString(BASE_CHECK_CODES,4); Result<String> res = new Result<String>();
//存到redis中 try {
String lowerCaseCode = code.toLowerCase(); //生成验证码
String code = RandomUtil.randomString(BASE_CHECK_CODES, 4);
//update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 //存到redis中
// 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可 String lowerCaseCode = code.toLowerCase();
String origin = lowerCaseCode+key+jeecgBaseConfig.getSignatureSecret();
String realKey = Md5Util.md5Encode(origin, "utf-8"); //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 // 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可
String origin = lowerCaseCode + key + jeecgBaseConfig.getSignatureSecret();
redisUtil.set(realKey, lowerCaseCode, 60); String realKey = Md5Util.md5Encode(origin, "utf-8");
log.info("获取验证码,Redis key = {},checkCode = {}", realKey, code); //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
//返回前端
String base64 = RandImageUtil.generate(code); redisUtil.set(realKey, lowerCaseCode, 60);
res.setSuccess(true); log.info("获取验证码,Redis key = {},checkCode = {}", realKey, code);
res.setResult(base64); //返回前端
} catch (Exception e) { String base64 = RandImageUtil.generate(code);
log.error(e.getMessage(), e); res.setSuccess(true);
res.error500("获取验证码失败,请检查redis配置!"); res.setCode(CommonConstant.SC_OK_200);
return res; res.setResult(base64);
} } catch (Exception e) {
return res; log.error(e.getMessage(), e);
} res.error500("获取验证码失败,请检查redis配置!");
return res;
/** }
* 切换菜单表为vue3的表 return res;
*/ }
@RequiresRoles({"admin"})
@GetMapping(value = "/switchVue3Menu") /**
public Result<String> switchVue3Menu(HttpServletResponse response) { * 切换菜单表为vue3的表
Result<String> res = new Result<String>(); */
sysPermissionService.switchVue3Menu(); @RequiresRoles({"admin"})
return res; @GetMapping(value = "/switchVue3Menu")
} public Result<String> switchVue3Menu(HttpServletResponse response) {
Result<String> res = new Result<String>();
/** sysPermissionService.switchVue3Menu();
* app登录 return res;
* @param sysLoginModel }
* @return
* @throws Exception /**
*/ * app登录
@RequestMapping(value = "/mLogin", method = RequestMethod.POST) *
public Result<JSONObject> mLogin(@RequestBody SysLoginModel sysLoginModel) throws Exception { * @param sysLoginModel
Result<JSONObject> result = new Result<JSONObject>(); * @return
String username = sysLoginModel.getUsername(); * @throws Exception
String password = sysLoginModel.getPassword(); */
JSONObject obj = new JSONObject(); @RequestMapping(value = "/mLogin", method = RequestMethod.POST)
public Result<JSONObject> mLogin(@RequestBody SysLoginModel sysLoginModel) throws Exception {
//update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 Result<JSONObject> result = new Result<JSONObject>();
if(isLoginFailOvertimes(username)){ String username = sysLoginModel.getUsername();
return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!"); String password = sysLoginModel.getPassword();
} JSONObject obj = new JSONObject();
//update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
//1. 校验用户是否有效 //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
SysUser sysUser = sysUserService.getUserByName(username); if (isLoginFailOvertimes(username)) {
result = sysUserService.checkUserIsEffective(sysUser); return result.error500("该用户登录失败次数过多,请于10分钟后再次登录!");
if(!result.isSuccess()) { }
return result; //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
} //1. 校验用户是否有效
SysUser sysUser = sysUserService.getUserByName(username);
//2. 校验用户名或密码是否正确 result = sysUserService.checkUserIsEffective(sysUser);
String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); if (!result.isSuccess()) {
String syspassword = sysUser.getPassword(); return result;
if (!syspassword.equals(userpassword)) { }
//update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
addLoginFailOvertimes(username); //2. 校验用户名或密码是否正确
//update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户 String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt());
result.error500("用户名或密码错误"); String syspassword = sysUser.getPassword();
return result; if (!syspassword.equals(userpassword)) {
} //update-begin-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
addLoginFailOvertimes(username);
//3.设置登录部门 //update-end-author:taoyan date:2022-11-7 for: issues/4109 平台用户登录失败锁定用户
String orgCode = sysUser.getOrgCode(); result.error500("用户名或密码错误");
if(oConvertUtils.isEmpty(orgCode)) { return result;
//如果当前用户无选择部门 查看部门关联信息 }
List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
//update-begin-author:taoyan date:20220117 for: JTC-1068【app】新建用户,没有设置部门及角色,点击登录提示暂未归属部,一直在登录页面 使用手机号登录 可正常 //3.设置登录部门
if (departs == null || departs.size() == 0) { String orgCode = sysUser.getOrgCode();
if (oConvertUtils.isEmpty(orgCode)) {
//如果当前用户无选择部门 查看部门关联信息
List<SysDepart> departs = sysDepartService.queryUserDeparts(sysUser.getId());
//update-begin-author:taoyan date:20220117 for: JTC-1068【app】新建用户,没有设置部门及角色,点击登录提示暂未归属部,一直在登录页面 使用手机号登录 可正常
if (departs == null || departs.size() == 0) {
/*result.error500("用户暂未归属部门,不可登录!"); /*result.error500("用户暂未归属部门,不可登录!");
return result;*/ return result;*/
}else{ } else {
orgCode = departs.get(0).getOrgCode(); orgCode = departs.get(0).getOrgCode();
sysUser.setOrgCode(orgCode); sysUser.setOrgCode(orgCode);
this.sysUserService.updateUserDepart(username, orgCode,null); this.sysUserService.updateUserDepart(username, orgCode, null);
} }
//update-end-author:taoyan date:20220117 for: JTC-1068【app】新建用户,没有设置部门及角色,点击登录提示暂未归属部,一直在登录页面 使用手机号登录 可正常 //update-end-author:taoyan date:20220117 for: JTC-1068【app】新建用户,没有设置部门及角色,点击登录提示暂未归属部,一直在登录页面 使用手机号登录 可正常
} }
//4. 设置登录租户 //4. 设置登录租户
Result<JSONObject> loginTenantError = sysUserService.setLoginTenant(sysUser, obj, username, result); Result<JSONObject> loginTenantError = sysUserService.setLoginTenant(sysUser, obj, username, result);
if (loginTenantError != null) { if (loginTenantError != null) {
return loginTenantError; return loginTenantError;
} }
//5. 设置登录用户信息 //5. 设置登录用户信息
obj.put("userInfo", sysUser); obj.put("userInfo", sysUser);
//6. 生成token //6. 生成token
String token = JwtUtil.sign(username, syspassword); String token = JwtUtil.sign(username, syspassword);
// 设置超时时间 // 设置超时时间
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000); redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
//token 信息 //token 信息
obj.put("token", token); obj.put("token", token);
result.setResult(obj); result.setResult(obj);
result.setSuccess(true); result.setSuccess(true);
result.setCode(200); result.setCode(200);
baseCommonService.addLog("用户名: " + username + ",登录成功[移动端]!", CommonConstant.LOG_TYPE_1, null); baseCommonService.addLog("用户名: " + username + ",登录成功[移动端]!", CommonConstant.LOG_TYPE_1, null);
return result; return result;
} }
/** /**
* 图形验证码 * 图形验证码
* @param sysLoginModel *
* @return * @param sysLoginModel
*/ * @return
@RequestMapping(value = "/checkCaptcha", method = RequestMethod.POST) */
public Result<?> checkCaptcha(@RequestBody SysLoginModel sysLoginModel){ @RequestMapping(value = "/checkCaptcha", method = RequestMethod.POST)
String captcha = sysLoginModel.getCaptcha(); public Result<?> checkCaptcha(@RequestBody SysLoginModel sysLoginModel) {
String checkKey = sysLoginModel.getCheckKey(); String captcha = sysLoginModel.getCaptcha();
if(captcha==null){ String checkKey = sysLoginModel.getCheckKey();
return Result.error("验证码无效"); if (captcha == null) {
} return Result.error("验证码无效");
String lowerCaseCaptcha = captcha.toLowerCase(); }
String realKey = Md5Util.md5Encode(lowerCaseCaptcha+checkKey, "utf-8"); String lowerCaseCaptcha = captcha.toLowerCase();
Object checkCode = redisUtil.get(realKey); String realKey = Md5Util.md5Encode(lowerCaseCaptcha + checkKey, "utf-8");
if(checkCode==null || !checkCode.equals(lowerCaseCaptcha)) { Object checkCode = redisUtil.get(realKey);
return Result.error("验证码错误"); if (checkCode == null || !checkCode.equals(lowerCaseCaptcha)) {
} return Result.error("验证码错误");
return Result.ok(); }
} return Result.ok();
/** }
* 登录二维码
*/ /**
@ApiOperation(value = "登录二维码", notes = "登录二维码") * 登录二维码
@GetMapping("/getLoginQrcode") */
public Result<?> getLoginQrcode() { @ApiOperation(value = "登录二维码", notes = "登录二维码")
String qrcodeId = CommonConstant.LOGIN_QRCODE_PRE+IdWorker.getIdStr(); @GetMapping("/getLoginQrcode")
//定义二维码参数 public Result<?> getLoginQrcode() {
Map params = new HashMap(5); String qrcodeId = CommonConstant.LOGIN_QRCODE_PRE + IdWorker.getIdStr();
params.put("qrcodeId", qrcodeId); //定义二维码参数
//存放二维码唯一标识30秒有效 Map params = new HashMap(5);
redisUtil.set(CommonConstant.LOGIN_QRCODE + qrcodeId, qrcodeId, 30); params.put("qrcodeId", qrcodeId);
return Result.OK(params); //存放二维码唯一标识30秒有效
} redisUtil.set(CommonConstant.LOGIN_QRCODE + qrcodeId, qrcodeId, 30);
/** return Result.OK(params);
* 扫码二维码 }
*/
@ApiOperation(value = "扫码登录二维码", notes = "扫码登录二维码") /**
@PostMapping("/scanLoginQrcode") * 扫码二维码
public Result<?> scanLoginQrcode(@RequestParam String qrcodeId, @RequestParam String token) { */
Object check = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId); @ApiOperation(value = "扫码登录二维码", notes = "扫码登录二维码")
if (oConvertUtils.isNotEmpty(check)) { @PostMapping("/scanLoginQrcode")
//存放token给前台读取 public Result<?> scanLoginQrcode(@RequestParam String qrcodeId, @RequestParam String token) {
redisUtil.set(CommonConstant.LOGIN_QRCODE_TOKEN+qrcodeId, token, 60); Object check = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId);
} else { if (oConvertUtils.isNotEmpty(check)) {
return Result.error("二维码已过期,请刷新后重试"); //存放token给前台读取
} redisUtil.set(CommonConstant.LOGIN_QRCODE_TOKEN + qrcodeId, token, 60);
return Result.OK("扫码成功"); } else {
} return Result.error("二维码已过期,请刷新后重试");
}
return Result.OK("扫码成功");
/** }
* 获取用户扫码后保存的token
*/
@ApiOperation(value = "获取用户扫码后保存的token", notes = "获取用户扫码后保存的token") /**
@GetMapping("/getQrcodeToken") * 获取用户扫码后保存的token
public Result getQrcodeToken(@RequestParam String qrcodeId) { */
Object token = redisUtil.get(CommonConstant.LOGIN_QRCODE_TOKEN + qrcodeId); @ApiOperation(value = "获取用户扫码后保存的token", notes = "获取用户扫码后保存的token")
Map result = new HashMap(5); @GetMapping("/getQrcodeToken")
Object qrcodeIdExpire = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId); public Result getQrcodeToken(@RequestParam String qrcodeId) {
if (oConvertUtils.isEmpty(qrcodeIdExpire)) { Object token = redisUtil.get(CommonConstant.LOGIN_QRCODE_TOKEN + qrcodeId);
//二维码过期通知前台刷新 Map result = new HashMap(5);
result.put("token", "-2"); Object qrcodeIdExpire = redisUtil.get(CommonConstant.LOGIN_QRCODE + qrcodeId);
return Result.OK(result); if (oConvertUtils.isEmpty(qrcodeIdExpire)) {
} //二维码过期通知前台刷新
if (oConvertUtils.isNotEmpty(token)) { result.put("token", "-2");
result.put("success", true); return Result.OK(result);
result.put("token", token); }
} else { if (oConvertUtils.isNotEmpty(token)) {
result.put("token", "-1"); result.put("success", true);
} result.put("token", token);
return Result.OK(result); } else {
} result.put("token", "-1");
}
/** return Result.OK(result);
* 登录失败超出次数5 返回true }
* @param username
* @return /**
*/ * 登录失败超出次数5 返回true
private boolean isLoginFailOvertimes(String username){ *
String key = CommonConstant.LOGIN_FAIL + username; * @param username
Object failTime = redisUtil.get(key); * @return
if(failTime!=null){ */
Integer val = Integer.parseInt(failTime.toString()); private boolean isLoginFailOvertimes(String username) {
if(val>5){ String key = CommonConstant.LOGIN_FAIL + username;
return true; Object failTime = redisUtil.get(key);
} if (failTime != null) {
} Integer val = Integer.parseInt(failTime.toString());
return false; if (val > 5) {
} return true;
}
/** }
* 记录登录失败次数 return false;
* @param username }
*/
private void addLoginFailOvertimes(String username){ /**
String key = CommonConstant.LOGIN_FAIL + username; * 记录登录失败次数
Object failTime = redisUtil.get(key); *
Integer val = 0; * @param username
if(failTime!=null){ */
val = Integer.parseInt(failTime.toString()); private void addLoginFailOvertimes(String username) {
} String key = CommonConstant.LOGIN_FAIL + username;
// 1小时 Object failTime = redisUtil.get(key);
redisUtil.set(key, ++val, 3600); Integer val = 0;
} if (failTime != null) {
val = Integer.parseInt(failTime.toString());
}
// 1小时
redisUtil.set(key, ++val, 3600);
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment