登录接口加异常处理redis,升级shiro版本

master
linjj 2 years ago
parent 5931301c50
commit ff45edf393

@ -33,7 +33,7 @@
<jdk.version>1.8</jdk.version> <jdk.version>1.8</jdk.version>
<mockito.version>1.9.5</mockito.version> <mockito.version>1.9.5</mockito.version>
<!--<spring.version>3.2.2.RELEASE</spring.version>--> <!--<spring.version>3.2.2.RELEASE</spring.version>-->
<shiro.version>1.2.2</shiro.version> <shiro.version>2.0.0</shiro.version>
<jetty.version>7.6.11.v20130520</jetty.version> <jetty.version>7.6.11.v20130520</jetty.version>
<servlet.version>2.4</servlet.version> <servlet.version>2.4</servlet.version>
<jsp.version>2.1</jsp.version> <jsp.version>2.1</jsp.version>
@ -139,11 +139,11 @@
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <!-- <dependency>-->
<groupId>com.manage</groupId> <!-- <groupId>com.manage</groupId>-->
<artifactId>power-foundation</artifactId> <!-- <artifactId>power-foundation</artifactId>-->
<version>1.0-SNAPSHOT</version> <!-- <version>1.0-SNAPSHOT</version>-->
</dependency> <!-- </dependency>-->
<dependency> <dependency>
<groupId>com.manage</groupId> <groupId>com.manage</groupId>
@ -313,11 +313,11 @@
<!-- JSP相关 --> <!-- JSP相关 -->
<!-- jsTree --> <!-- jsTree -->
<!-- https://mvnrepository.com/artifact/org.webjars.bower/jstree --> <!-- https://mvnrepository.com/artifact/org.webjars.bower/jstree -->
<dependency> <!-- <dependency>-->
<groupId>org.webjars.bower</groupId> <!-- <groupId>org.webjars.bower</groupId>-->
<artifactId>jstree</artifactId> <!-- <artifactId>jstree</artifactId>-->
<version>3.3.4</version> <!-- <version>3.3.4</version>-->
</dependency> <!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils --> <!-- https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils -->
<dependency> <dependency>
@ -363,58 +363,62 @@
<version>${jedis.version}</version> <version>${jedis.version}</version>
</dependency> </dependency>
<!-- solr客户端 --> <!-- solr客户端 -->
<dependency> <!-- <dependency>-->
<groupId>org.apache.solr</groupId> <!-- <groupId>org.apache.solr</groupId>-->
<artifactId>solr-solrj</artifactId> <!-- <artifactId>solr-solrj</artifactId>-->
<version>${solrj.version}</version> <!-- <version>${solrj.version}</version>-->
</dependency> <!-- </dependency>-->
<!-- OpenSDK中转CGI接口后台接口:经由 opensdk 确认登记后,才可以进行上报 --> <!-- &lt;!&ndash; OpenSDK中转CGI接口后台接口:经由 opensdk 确认登记后,才可以进行上报 &ndash;&gt;-->
<dependency> <!-- <dependency>-->
<groupId>com.manage</groupId> <!-- <groupId>com.manage</groupId>-->
<artifactId>framework-open-sdk</artifactId> <!-- <artifactId>framework-open-sdk</artifactId>-->
<version>${framework.version}</version> <!-- <version>${framework.version}</version>-->
</dependency> <!-- </dependency>-->
<dependency> <!-- <dependency>-->
<groupId>org.springframework.data</groupId> <!-- <groupId>org.springframework.data</groupId>-->
<artifactId>spring-data-jpa</artifactId> <!-- <artifactId>spring-data-jpa</artifactId>-->
<version>1.3.0.RELEASE</version> <!-- <version>1.3.0.RELEASE</version>-->
</dependency> <!-- </dependency>-->
<!-- SECURITY begin :进行用户认证以及授予权限的时候,通过各种各样的拦截器来控制权限的访问,从而实现安全 --> <!-- SECURITY begin :进行用户认证以及授予权限的时候,通过各种各样的拦截器来控制权限的访问,从而实现安全 -->
<dependency> <!-- <dependency>-->
<groupId>org.apache.shiro</groupId> <!-- <groupId>org.apache.shiro</groupId>-->
<artifactId>shiro-spring</artifactId> <!-- <artifactId>shiro-spring</artifactId>-->
<version>${shiro.version}</version> <!-- <version>2.0.0-alpha-1</version>-->
</dependency> <!-- <scope>system</scope>-->
<dependency> <!-- <systemPath>${project.basedir}/lib/shiro-spring-2.0.0-alpha-1.jar</systemPath>-->
<groupId>org.apache.shiro</groupId> <!-- </dependency>-->
<artifactId>shiro-ehcache</artifactId> <!-- <dependency>-->
<version>${shiro.version}</version> <!-- <groupId>org.apache.shiro</groupId>-->
</dependency> <!-- <artifactId>shiro-ehcache</artifactId>-->
<!-- <version>2.0.0-alpha-1</version>-->
<!-- <scope>system</scope>-->
<!-- <systemPath>${project.basedir}/lib/shiro-ehcache-2.0.0-alpha-1.jar</systemPath>-->
<!-- </dependency>-->
<!-- SECURITY end --> <!-- SECURITY end -->
<!-- 工作流 --> <!-- 工作流 -->
<dependency> <!-- <dependency>-->
<groupId>org.activiti</groupId> <!-- <groupId>org.activiti</groupId>-->
<artifactId>activiti-engine</artifactId> <!-- <artifactId>activiti-engine</artifactId>-->
<version>${activiti.version}</version> <!-- <version>${activiti.version}</version>-->
</dependency> <!-- </dependency>-->
<dependency> <!-- <dependency>-->
<groupId>org.activiti</groupId> <!-- <groupId>org.activiti</groupId>-->
<artifactId>activiti-spring</artifactId> <!-- <artifactId>activiti-spring</artifactId>-->
<version>${activiti.version}</version> <!-- <version>${activiti.version}</version>-->
</dependency> <!-- </dependency>-->
<!-- groovy脚本引擎 --> <!-- &lt;!&ndash; groovy脚本引擎 &ndash;&gt;-->
<dependency> <!-- <dependency>-->
<groupId>org.codehaus.groovy</groupId> <!-- <groupId>org.codehaus.groovy</groupId>-->
<artifactId>groovy-all</artifactId> <!-- <artifactId>groovy-all</artifactId>-->
<version>${groovy.version}</version> <!-- <version>${groovy.version}</version>-->
</dependency> <!-- </dependency>-->
<dependency> <dependency>
<groupId>com.mchange</groupId> <groupId>com.mchange</groupId>

@ -66,145 +66,143 @@ public class LoginController {
@ResponseBody @ResponseBody
public Msg login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model) throws Exception { public Msg login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model) throws Exception {
Jedis redis = JedisPoolUtil.getJedisPoolInstance().getResource(); Jedis redis = JedisPoolUtil.getJedisPoolInstance().getResource();
String userPwd = powerUser.getUserPwd();
String userName = powerUser.getUserName();
String userInfo = redis.get(userName);
//用来记录错误的次数
String errorPwsCount = "0";
//没有这个id的话新建一个
if (userInfo == null) {
redis.set(userName, errorPwsCount);
}
//获取已经记录错误次数
int i = Integer.parseInt(redis.get(userName));
//小于5可以继续登录,大于5
if (i < 5) {
try { try {
Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser); String userPwd = powerUser.getUserPwd();
//添加进操作日志 String userName = powerUser.getUserName();
Power_Log log = new Power_Log(); String userInfo = redis.get(userName);
if( user != null){ //用来记录错误的次数
//如处于登录状态,先清除缓存 String errorPwsCount = "0";
//CacheManager.removeCacheByObject(user); //没有这个id的话新建一个
//记住 if (userInfo == null) {
MyCookieUtil.remember(request, response); redis.set(userName, errorPwsCount);
//清除用户登录错误次数缓存 }
CacheManager.clearOnly(powerUser.getUserName()); //获取已经记录错误次数
//存session密码置空 int i = Integer.parseInt(redis.get(userName));
//是否记住密码功能 //小于5可以继续登录,大于5
MyCookieUtil.remember(request, response); if (i < 5) {
//设置token缓存 try {
String date = String.valueOf(DateUtils.getDate()); Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser);
String token = UUID.randomUUID().toString(); //添加进操作日志
//查询归属医院 Power_Log log = new Power_Log();
/* long start5 = System.currentTimeMillis(); if( user != null){
Power_User_Dict powerUserDict = powerUserDictMapper.selectDictIdByUserId(user.getUserId()); //如处于登录状态,先清除缓存
long end5 = System.currentTimeMillis(); //CacheManager.removeCacheByObject(user);
System.out.println("查询医院时间="+(end5-start5)/1000.0+"s"); //记住
user.setDictId(powerUserDict.getDictId());*/ MyCookieUtil.remember(request, response);
//科室id科室名 //清除用户登录错误次数缓存
ActionScopeUtils.setSessionAttribute("token",token,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000); CacheManager.clearOnly(powerUser.getUserName());
//存session密码置空
//设置用户登录次数缓存 //是否记住密码功能
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); MyCookieUtil.remember(request, response);
CacheManager.addloginUserCount(fmt.format(new Date()),user.getUserName()); //设置token缓存
CacheManager.addExcCount("noExc"); String date = String.valueOf(DateUtils.getDate());
List<Power_Menu> list = null; String token = UUID.randomUUID().toString();
List<User_Dept_Menu> menuList = new ArrayList<>(); ActionScopeUtils.setSessionAttribute("token",token,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000);
Set<String> menus = new LinkedHashSet<>(); //设置用户登录次数缓存
if (user.getRoleId().equals(0) || user.getRoleId().equals(-100)) { SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
list = powerMenuService.queryAllPowerMenu(null,user.getRoleId()); CacheManager.addloginUserCount(fmt.format(new Date()),user.getUserName());
} else { CacheManager.addExcCount("noExc");
list = powerMenuService.selectUserAndRoleMenuListPower(user.getUserId(),null); List<Power_Menu> list = null;
} List<User_Dept_Menu> menuList = new ArrayList<>();
if(null != list && !list.isEmpty()){ Set<String> menus = new LinkedHashSet<>();
for (Power_Menu power_menu : list) { if (user.getRoleId().equals(0) || user.getRoleId().equals(-100)) {
User_Dept_Menu deptMenu = new User_Dept_Menu(); list = powerMenuService.queryAllPowerMenu(null,user.getRoleId());
String menuUrl = power_menu.getMenuUrl(); } else {
if (StringUtils.isNotBlank(menuUrl)) { list = powerMenuService.selectUserAndRoleMenuListPower(user.getUserId(),null);
BeanUtils.copyProperties(power_menu, deptMenu);
deptMenu.setMethodParent(power_menu.getParentId());
menuList.add(deptMenu);
}
if (StringUtils.isNotBlank(power_menu.getMethod())) {
menus.add(power_menu.getMenuUrl());
}
} }
} if(null != list && !list.isEmpty()){
user.setMenuList(menuList); for (Power_Menu power_menu : list) {
user.setMenus(menus); User_Dept_Menu deptMenu = new User_Dept_Menu();
//设置科室 String menuUrl = power_menu.getMenuUrl();
StringBuilder power_depts = new StringBuilder(); if (StringUtils.isNotBlank(menuUrl)) {
List<Power_Dept> power_depts1 = power_deptService.selectByPrimaryKeys(user.getDeptId()); BeanUtils.copyProperties(power_menu, deptMenu);
for(int j=0;j<power_depts1.size();j++){ deptMenu.setMethodParent(power_menu.getParentId());
if(j<power_depts1.size()-1){ menuList.add(deptMenu);
power_depts.append(power_depts1.get(j).getDeptName()).append(","); }
}else{ if (StringUtils.isNotBlank(power_menu.getMethod())) {
power_depts.append(power_depts1.get(j).getDeptName()); menus.add(power_menu.getMenuUrl());
}
}
} }
} user.setMenuList(menuList);
user.setRemark(power_depts.toString()); user.setMenus(menus);
StringBuilder power_depts3 = new StringBuilder(); //设置科室
if (user.getDeptIdQuality()!=null){ StringBuilder power_depts = new StringBuilder();
List<Power_Dept> power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality()); List<Power_Dept> power_depts1 = power_deptService.selectByPrimaryKeys(user.getDeptId());
for(int a=0;a<power_depts2.size();a++){ for(int j=0;j<power_depts1.size();j++){
if(a<power_depts2.size()-1){ if(j<power_depts1.size()-1){
power_depts3.append(power_depts2.get(a).getDeptCode()).append(","); power_depts.append(power_depts1.get(j).getDeptName()).append(",");
}else{ }else{
power_depts3.append(power_depts2.get(a).getDeptCode()); power_depts.append(power_depts1.get(j).getDeptName());
} }
} }
user.setDeptIdQuality(power_depts3.toString()); user.setRemark(power_depts.toString());
} StringBuilder power_depts3 = new StringBuilder();
//设置进缓存 if (user.getDeptIdQuality()!=null){
CacheManager.putCache(token,new Cache(date,user,TOKEN_EXPIRE_TIME)); List<Power_Dept> power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality());
ActionScopeUtils.setSessionAttribute("CURRENT_USER",user,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000); for(int a=0;a<power_depts2.size();a++){
String reg = "^(?![A-Za-z]+$)(?![A-Z\\d]+$)(?![A-Z\\W]+$)(?![a-z\\d]+$)(?![a-z\\W]+$)(?![\\d\\W]+$)\\S{8,20}$"; if(a<power_depts2.size()-1){
boolean msg=userPwd.matches(reg); power_depts3.append(power_depts2.get(a).getDeptCode()).append(",");
redis.del(userName); }else{
JedisPoolUtil.close(redis); power_depts3.append(power_depts2.get(a).getDeptCode());
if (msg==false){ }
String url = "http://" + SERVER_IP + ":" + SERVER_PORT +"/power"+ "/font/updatePassword"; }
return Msg.success().add("url", url); user.setDeptIdQuality(power_depts3.toString());
}else { }
String url = "http://" + SERVER_IP + ":" + SERVER_PORT + "/power/gatewayPage"; //设置进缓存
return Msg.success().add("url", url); CacheManager.putCache(token,new Cache(date,user,TOKEN_EXPIRE_TIME));
} ActionScopeUtils.setSessionAttribute("CURRENT_USER",user,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000);
}else{ String reg = "^(?![A-Za-z]+$)(?![A-Z\\d]+$)(?![A-Z\\W]+$)(?![a-z\\d]+$)(?![a-z\\W]+$)(?![\\d\\W]+$)\\S{8,20}$";
//登录失败 boolean msg=userPwd.matches(reg);
Integer wrongNum = 1; redis.del(userName);
Cache cache = CacheManager.getCacheInfo(powerUser.getUserName()); JedisPoolUtil.close(redis);
if(cache != null){ if (msg==false){
//缓存中错误次数 String url = "http://" + SERVER_IP + ":" + SERVER_PORT +"/power"+ "/font/updatePassword";
Integer currentNum = (Integer)cache.getValue(); return Msg.success().add("url", url);
//叠加1 }else {
wrongNum += currentNum; String url = "http://" + SERVER_IP + ":" + SERVER_PORT + "/power/gatewayPage";
return Msg.success().add("url", url);
}
}else{
//登录失败
Integer wrongNum = 1;
Cache cache = CacheManager.getCacheInfo(powerUser.getUserName());
if(cache != null){
//缓存中错误次数
Integer currentNum = (Integer)cache.getValue();
//叠加1
wrongNum += currentNum;
}
//先清除后添加缓存
CacheManager.clearOnly(powerUser.getUserName());
CacheManager.putCache(powerUser.getUserName(),new Cache(powerUser.getUserName(),wrongNum));
log.setCreater(powerUser.getUserName());
log.setLogTitle("登录");
log.setLogContent("用户密码错误");
log.setRemark("已错误【"+wrongNum+"】次");
logService.insert(log);
request.setAttribute("msg", "用户名或密码不正确");
redis.incr(userName);
JedisPoolUtil.close(redis);
return Msg.failUser();
} }
//先清除后添加缓存 }catch (Exception e){
CacheManager.clearOnly(powerUser.getUserName()); ExceptionPrintUtil.printException(e);
CacheManager.putCache(powerUser.getUserName(),new Cache(powerUser.getUserName(),wrongNum)); e.printStackTrace();
log.setCreater(powerUser.getUserName()); CacheManager.addExcCount("exc");
log.setLogTitle("登录"); }
log.setLogContent("用户密码错误"); }else {
log.setRemark("已错误【"+wrongNum+"】次"); //失败次数大于五时锁十五分钟
logService.insert(log); redis.setex(userName, 900, i + "");
request.setAttribute("msg", "用户名或密码不正确");
redis.incr(userName);
JedisPoolUtil.close(redis); JedisPoolUtil.close(redis);
return Msg.failUser(); return Msg.failUser2();
} }
}catch (Exception e){ return null;
ExceptionPrintUtil.printException(e); } catch (NumberFormatException e) {
e.printStackTrace(); throw new RuntimeException(e);
CacheManager.addExcCount("exc"); }finally {
}
}else {
//失败次数大于五时锁十五分钟
redis.setex(userName, 900, i + "");
JedisPoolUtil.close(redis); JedisPoolUtil.close(redis);
return Msg.failUser2();
} }
return null;
} }
@RequestMapping("refuse") @RequestMapping("refuse")
public String refuse(){ public String refuse(){

Loading…
Cancel
Save