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

master
linjj 2 years ago
parent 5931301c50
commit ff45edf393

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

@ -66,145 +66,143 @@ public class LoginController {
@ResponseBody
public Msg login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model) throws Exception {
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 {
Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser);
//添加进操作日志
Power_Log log = new Power_Log();
if( user != null){
//如处于登录状态,先清除缓存
//CacheManager.removeCacheByObject(user);
//记住
MyCookieUtil.remember(request, response);
//清除用户登录错误次数缓存
CacheManager.clearOnly(powerUser.getUserName());
//存session密码置空
//是否记住密码功能
MyCookieUtil.remember(request, response);
//设置token缓存
String date = String.valueOf(DateUtils.getDate());
String token = UUID.randomUUID().toString();
//查询归属医院
/* long start5 = System.currentTimeMillis();
Power_User_Dict powerUserDict = powerUserDictMapper.selectDictIdByUserId(user.getUserId());
long end5 = System.currentTimeMillis();
System.out.println("查询医院时间="+(end5-start5)/1000.0+"s");
user.setDictId(powerUserDict.getDictId());*/
//科室id科室名
ActionScopeUtils.setSessionAttribute("token",token,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000);
//设置用户登录次数缓存
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
CacheManager.addloginUserCount(fmt.format(new Date()),user.getUserName());
CacheManager.addExcCount("noExc");
List<Power_Menu> list = null;
List<User_Dept_Menu> menuList = new ArrayList<>();
Set<String> menus = new LinkedHashSet<>();
if (user.getRoleId().equals(0) || user.getRoleId().equals(-100)) {
list = powerMenuService.queryAllPowerMenu(null,user.getRoleId());
} else {
list = powerMenuService.selectUserAndRoleMenuListPower(user.getUserId(),null);
}
if(null != list && !list.isEmpty()){
for (Power_Menu power_menu : list) {
User_Dept_Menu deptMenu = new User_Dept_Menu();
String menuUrl = power_menu.getMenuUrl();
if (StringUtils.isNotBlank(menuUrl)) {
BeanUtils.copyProperties(power_menu, deptMenu);
deptMenu.setMethodParent(power_menu.getParentId());
menuList.add(deptMenu);
}
if (StringUtils.isNotBlank(power_menu.getMethod())) {
menus.add(power_menu.getMenuUrl());
}
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 {
Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser);
//添加进操作日志
Power_Log log = new Power_Log();
if( user != null){
//如处于登录状态,先清除缓存
//CacheManager.removeCacheByObject(user);
//记住
MyCookieUtil.remember(request, response);
//清除用户登录错误次数缓存
CacheManager.clearOnly(powerUser.getUserName());
//存session密码置空
//是否记住密码功能
MyCookieUtil.remember(request, response);
//设置token缓存
String date = String.valueOf(DateUtils.getDate());
String token = UUID.randomUUID().toString();
ActionScopeUtils.setSessionAttribute("token",token,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000);
//设置用户登录次数缓存
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
CacheManager.addloginUserCount(fmt.format(new Date()),user.getUserName());
CacheManager.addExcCount("noExc");
List<Power_Menu> list = null;
List<User_Dept_Menu> menuList = new ArrayList<>();
Set<String> menus = new LinkedHashSet<>();
if (user.getRoleId().equals(0) || user.getRoleId().equals(-100)) {
list = powerMenuService.queryAllPowerMenu(null,user.getRoleId());
} else {
list = powerMenuService.selectUserAndRoleMenuListPower(user.getUserId(),null);
}
}
user.setMenuList(menuList);
user.setMenus(menus);
//设置科室
StringBuilder power_depts = new StringBuilder();
List<Power_Dept> power_depts1 = power_deptService.selectByPrimaryKeys(user.getDeptId());
for(int j=0;j<power_depts1.size();j++){
if(j<power_depts1.size()-1){
power_depts.append(power_depts1.get(j).getDeptName()).append(",");
}else{
power_depts.append(power_depts1.get(j).getDeptName());
if(null != list && !list.isEmpty()){
for (Power_Menu power_menu : list) {
User_Dept_Menu deptMenu = new User_Dept_Menu();
String menuUrl = power_menu.getMenuUrl();
if (StringUtils.isNotBlank(menuUrl)) {
BeanUtils.copyProperties(power_menu, deptMenu);
deptMenu.setMethodParent(power_menu.getParentId());
menuList.add(deptMenu);
}
if (StringUtils.isNotBlank(power_menu.getMethod())) {
menus.add(power_menu.getMenuUrl());
}
}
}
}
user.setRemark(power_depts.toString());
StringBuilder power_depts3 = new StringBuilder();
if (user.getDeptIdQuality()!=null){
List<Power_Dept> power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality());
for(int a=0;a<power_depts2.size();a++){
if(a<power_depts2.size()-1){
power_depts3.append(power_depts2.get(a).getDeptCode()).append(",");
user.setMenuList(menuList);
user.setMenus(menus);
//设置科室
StringBuilder power_depts = new StringBuilder();
List<Power_Dept> power_depts1 = power_deptService.selectByPrimaryKeys(user.getDeptId());
for(int j=0;j<power_depts1.size();j++){
if(j<power_depts1.size()-1){
power_depts.append(power_depts1.get(j).getDeptName()).append(",");
}else{
power_depts3.append(power_depts2.get(a).getDeptCode());
power_depts.append(power_depts1.get(j).getDeptName());
}
}
user.setDeptIdQuality(power_depts3.toString());
}
//设置进缓存
CacheManager.putCache(token,new Cache(date,user,TOKEN_EXPIRE_TIME));
ActionScopeUtils.setSessionAttribute("CURRENT_USER",user,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000);
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);
redis.del(userName);
JedisPoolUtil.close(redis);
if (msg==false){
String url = "http://" + SERVER_IP + ":" + SERVER_PORT +"/power"+ "/font/updatePassword";
return Msg.success().add("url", url);
}else {
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;
user.setRemark(power_depts.toString());
StringBuilder power_depts3 = new StringBuilder();
if (user.getDeptIdQuality()!=null){
List<Power_Dept> power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality());
for(int a=0;a<power_depts2.size();a++){
if(a<power_depts2.size()-1){
power_depts3.append(power_depts2.get(a).getDeptCode()).append(",");
}else{
power_depts3.append(power_depts2.get(a).getDeptCode());
}
}
user.setDeptIdQuality(power_depts3.toString());
}
//设置进缓存
CacheManager.putCache(token,new Cache(date,user,TOKEN_EXPIRE_TIME));
ActionScopeUtils.setSessionAttribute("CURRENT_USER",user,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000);
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);
redis.del(userName);
JedisPoolUtil.close(redis);
if (msg==false){
String url = "http://" + SERVER_IP + ":" + SERVER_PORT +"/power"+ "/font/updatePassword";
return Msg.success().add("url", url);
}else {
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();
}
//先清除后添加缓存
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);
}catch (Exception e){
ExceptionPrintUtil.printException(e);
e.printStackTrace();
CacheManager.addExcCount("exc");
}
}else {
//失败次数大于五时锁十五分钟
redis.setex(userName, 900, i + "");
JedisPoolUtil.close(redis);
return Msg.failUser();
return Msg.failUser2();
}
}catch (Exception e){
ExceptionPrintUtil.printException(e);
e.printStackTrace();
CacheManager.addExcCount("exc");
}
}else {
//失败次数大于五时锁十五分钟
redis.setex(userName, 900, i + "");
return null;
} catch (NumberFormatException e) {
throw new RuntimeException(e);
}finally {
JedisPoolUtil.close(redis);
return Msg.failUser2();
}
return null;
}
@RequestMapping("refuse")
public String refuse(){

Loading…
Cancel
Save