Przeglądaj źródła

添加springboot session redis以及拦截器

dev
yeqd 4 lat temu
rodzic
commit
30d36f9917
8 zmienionych plików z 236 dodań i 11 usunięć
  1. +6
    -0
      user-client/src/main/java/com/hp/user/client/service/AccountService.java
  2. +1
    -0
      user-service/pom.xml
  3. +25
    -0
      user-service/src/main/java/com/hp/user/service/config/WebAppConfigurer.java
  4. +4
    -0
      user-service/src/main/java/com/hp/user/service/constants/UserConstants.java
  5. +1
    -1
      user-service/src/main/java/com/hp/user/service/controller/MessageController.java
  6. +9
    -0
      user-service/src/main/java/com/hp/user/service/controller/UserController.java
  7. +59
    -10
      user-service/src/main/java/com/hp/user/service/impl/AccountServiceImpl.java
  8. +131
    -0
      user-service/src/main/java/com/hp/user/service/interceptor/SystemInterceptor.java

+ 6
- 0
user-client/src/main/java/com/hp/user/client/service/AccountService.java Wyświetl plik

@@ -61,5 +61,11 @@ public interface AccountService {
* @return * @return
*/ */
public DataResult<AccountVO> wxRegister(AccountVO account,String verificationCode); public DataResult<AccountVO> wxRegister(AccountVO account,String verificationCode);
/**
* 通过session获取用户信息
* @return
*/
public DataResult<AccountVO> queryUserBySession();
} }

+ 1
- 0
user-service/pom.xml Wyświetl plik

@@ -56,6 +56,7 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.hp</groupId> <groupId>com.hp</groupId>
<artifactId>user-client</artifactId> <artifactId>user-client</artifactId>


+ 25
- 0
user-service/src/main/java/com/hp/user/service/config/WebAppConfigurer.java Wyświetl plik

@@ -0,0 +1,25 @@
package com.hp.user.service.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

import com.hp.user.service.interceptor.SystemInterceptor;

//放在主类上不包括其他东西
//WebMvcConfigurerAdapter这个类,重写这个类中的方法可以让我们增加额外的配置
@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {
//addResourceLocations指的是文件放置的目录

@Override
public void addInterceptors(InterceptorRegistry registry) {
// 多个拦截器组成一个拦截器链
registry.addInterceptor(new SystemInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
}
//addResoureHandler指的是对外暴露的访问路径 此处一般默认即可
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 静态资源拦截器
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
}

+ 4
- 0
user-service/src/main/java/com/hp/user/service/constants/UserConstants.java Wyświetl plik

@@ -32,5 +32,9 @@ public class UserConstants {
public final static String WX_SECRET = "949ca88e8f786d9496d695f956cae594"; public final static String WX_SECRET = "949ca88e8f786d9496d695f956cae594";
public final static String WX_GRANT_TYPE = "authorization_code"; public final static String WX_GRANT_TYPE = "authorization_code";
public final static String SESSION_PRIFX = "hp@session@";
public final static int SESSION_OUT_TIME = 1800;


} }

+ 1
- 1
user-service/src/main/java/com/hp/user/service/controller/MessageController.java Wyświetl plik

@@ -17,7 +17,7 @@ import io.swagger.annotations.ApiOperation;
*/ */
@Api(tags="短信") @Api(tags="短信")
@RestController @RestController
@RequestMapping("/area")
@RequestMapping("/message")
public class MessageController { public class MessageController {
@Autowired @Autowired


+ 9
- 0
user-service/src/main/java/com/hp/user/service/controller/UserController.java Wyświetl plik

@@ -106,4 +106,13 @@ public class UserController {
public Result batchChangeStatusOfUser(@RequestBody String[] userIds, @RequestParam Short status) { public Result batchChangeStatusOfUser(@RequestBody String[] userIds, @RequestParam Short status) {
return accountService.batchChangeStatusOfUser(userIds, status); return accountService.batchChangeStatusOfUser(userIds, status);
} }
/**
* 通过session查询用户
*/
@RequestMapping("/queryUserBySession")
@ApiOperation(value = "通过session查询用户", notes = "通过session查询用户", httpMethod = "POST")
public DataResult<AccountVO> queryUserBySession() {
return accountService.queryUserBySession();
}
} }

+ 59
- 10
user-service/src/main/java/com/hp/user/service/impl/AccountServiceImpl.java Wyświetl plik

@@ -10,15 +10,23 @@ import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.hp.user.client.entity.*; import com.hp.user.client.entity.*;
import com.hp.user.client.service.AccountService; import com.hp.user.client.service.AccountService;
import com.hp.user.client.service.MessageService; import com.hp.user.client.service.MessageService;
import com.hp.user.service.constants.UserConstants;
import com.hp.user.service.dao.AccountMapper; import com.hp.user.service.dao.AccountMapper;
import com.hp.user.service.entity.Account; import com.hp.user.service.entity.Account;
import com.hp.user.service.entity.CustomerCompany; import com.hp.user.service.entity.CustomerCompany;
import com.hp.user.service.entity.ElectricianGroup; import com.hp.user.service.entity.ElectricianGroup;
import com.hp.user.service.redis.RedisOperation;
import com.hp.user.service.utils.WeixinSignUtil; import com.hp.user.service.utils.WeixinSignUtil;
import redis.clients.jedis.Jedis;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -34,9 +42,12 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class AccountServiceImpl implements AccountService { public class AccountServiceImpl implements AccountService {
@Autowired @Autowired
private MessageService messageService; private MessageService messageService;
@Autowired
private HttpServletRequest request;
@Autowired @Autowired
private AccountMapper accountMapper; private AccountMapper accountMapper;
@@ -46,12 +57,19 @@ public class AccountServiceImpl implements AccountService {
Result result = new Result(); Result result = new Result();
try { try {
//需要判断phone是否存在 //需要判断phone是否存在
Result checkPhoneResult = checkPhone(phone);
if(null != checkPhoneResult.getMessage()) {
DataResult<Account> checkPhoneResult = checkPhone(phone);
Account account = checkPhoneResult.getData();
HttpSession session = request.getSession();
if(null != account) {
String code = messageService.getVerificationCode(phone); String code = messageService.getVerificationCode(phone);
if (StringUtils.equals(verificationCode, code)) { if (StringUtils.equals(verificationCode, code)) {
//登陆成功 //登陆成功
messageService.deleteVerificationCode(phone); messageService.deleteVerificationCode(phone);
String sessionId = session.getId();
account.setWxOpenId(null);
Jedis jedis = RedisOperation.getRedis();
String key = UserConstants.SESSION_PRIFX+sessionId;
jedis.setex(key, UserConstants.EXPIRE_SECONDS, JSONObject.toJSONString(account));
} else { } else {
//登陆失败 //登陆失败
//返回错误信息 //返回错误信息
@@ -63,6 +81,7 @@ public class AccountServiceImpl implements AccountService {
result.setMessage("手机号码未注册!"); result.setMessage("手机号码未注册!");
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
result.setCode("-1"); result.setCode("-1");
result.setMessage("系统出现问题"); result.setMessage("系统出现问题");
} }
@@ -70,22 +89,21 @@ public class AccountServiceImpl implements AccountService {
} }
@Override @Override
public Result checkPhone(String phone) {
Result result = new Result();
public DataResult<Account> checkPhone(String phone) {
DataResult<Account> result = new DataResult<Account>();
//不存在为true //不存在为true
Boolean flage = true;
try { try {
QueryWrapper<Account> queryWrapper = new QueryWrapper<>(); QueryWrapper<Account> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("phone", phone); queryWrapper.eq("phone", phone);
queryWrapper.eq("sys_deleted", 0); queryWrapper.eq("sys_deleted", 0);
Integer count = accountMapper.selectCount(queryWrapper);
if (count > 0) {
Account account = accountMapper.selectOne(queryWrapper);
if (null != account) {
//表示手机以及存在,需要返回错误 //表示手机以及存在,需要返回错误
result.setCode("-1"); result.setCode("-1");
result.setMessage("手机号已经存在"); result.setMessage("手机号已经存在");
result.setData(account);
} }
} catch (Exception e) { } catch (Exception e) {
result.setCode("-1"); result.setCode("-1");
result.setMessage("系统出现问题"); result.setMessage("系统出现问题");
@@ -197,6 +215,7 @@ public class AccountServiceImpl implements AccountService {
} }
String code = messageService.getVerificationCode(accountVO.getPhone()); String code = messageService.getVerificationCode(accountVO.getPhone());
if(StringUtils.equals(verificationCode, code)) { if(StringUtils.equals(verificationCode, code)) {
messageService.deleteVerificationCode(accountVO.getPhone());
Account account = new Account(); Account account = new Account();
BeanUtils.copyProperties(accountVO, account); BeanUtils.copyProperties(accountVO, account);
Long id = IdWorker.getId(); Long id = IdWorker.getId();
@@ -377,6 +396,7 @@ public class AccountServiceImpl implements AccountService {
if (SqlHelper.retBool(flag)) { if (SqlHelper.retBool(flag)) {
result.setCode("0"); result.setCode("0");
} else { } else {
result.setCode("-1"); result.setCode("-1");
result.setMessage("更新失败"); result.setMessage("更新失败");
} }
@@ -400,8 +420,37 @@ public class AccountServiceImpl implements AccountService {
result.setData(temp); result.setData(temp);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
result.setCode("-1");
result.setMessage("更新失败");
} }
return result; return result;
} }
@Override
public DataResult<AccountVO> queryUserBySession() {
DataResult<AccountVO> result = new DataResult<AccountVO>();
try {
HttpSession session = request.getSession();
String sessionId = session.getId();
String value = null;
AccountVO accountVO = null;
if(!StringUtils.isBlank(sessionId)) {
Jedis jedis = RedisOperation.getRedis();
String key = UserConstants.SESSION_PRIFX+sessionId;
value = jedis.get(key);
accountVO = JSONObject.parseObject(value, AccountVO.class);
}
result.setData(accountVO);
// String userId = ;
// session.
}catch(Exception e) {
e.printStackTrace();
result.setCode("-1");
result.setMessage("系统出现问题");
}
return result;
}
} }

+ 131
- 0
user-service/src/main/java/com/hp/user/service/interceptor/SystemInterceptor.java Wyświetl plik

@@ -0,0 +1,131 @@
package com.hp.user.service.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.hp.user.service.constants.UserConstants;
import com.hp.user.service.redis.RedisOperation;

import redis.clients.jedis.Jedis;
/**
*
* @author geloin
*/
@Repository
public class SystemInterceptor extends HandlerInterceptorAdapter {
// @Resource(name = "systemLoggerService")
// private SystemLoggerService systemLoggerService;
/*
* (non-Javadoc)
*
* @see
* org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle
* (javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse, java.lang.Object)
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String uri = request.getRequestURI();
HttpSession session = request.getSession();
String sessionId = session.getId();
// "message
if(-1 != StringUtils.indexOfIgnoreCase(uri,"message") || -1 != StringUtils.indexOfIgnoreCase(uri,"swagger") || -1 != StringUtils.indexOfIgnoreCase(uri,"authentication/login")
|| -1 != StringUtils.indexOfIgnoreCase(uri,"wxAuthorization")||-1 != StringUtils.indexOfIgnoreCase(uri,"wxRegister")) {
// response.setStatus(401);
return true;
}
if(StringUtils.isBlank(sessionId)) {
response.setStatus(401);
return false;
}else {
Jedis jedis = RedisOperation.getRedis();
String key = UserConstants.SESSION_PRIFX+sessionId;
String value = jedis.get(key);
if(StringUtils.isBlank(value)) {
response.setStatus(401);
return false;
}else {
return true;
}
}
// System.out.println("拦截测试");
// return false;
// request.setCharacterEncoding("UTF-8");
// response.setCharacterEncoding("UTF-8");
// response.setContentType("text/html;charset=UTF-8");
//
// // 后台session控制
// String[] noFilters = new String[] { "login.html", "veriCode.html",
// "index.html", "logout.html" };
// String uri = request.getRequestURI();
//
// if (uri.indexOf("log") != -1) {
// boolean beFilter = true;
// for (String s : noFilters) {
// if (uri.indexOf(s) != -1) {
// beFilter = false;
// break;
// }
// }
// if (beFilter) {
// Object obj = request.getSession().getAttribute(
// Constants.LOGINED);
// if (null == obj) {
//
// // 未登录
// PrintWriter out = response.getWriter();
// StringBuilder builder = new StringBuilder();
// builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
// builder.append("alert(\"页面过期,请重新登录\");");
// builder.append("window.top.location.href=\"");
// builder.append(Constants.basePath);
// builder.append("/background/index.html\";</script>");
// out.print(builder.toString());
// out.close();
// return false;
// } else {
// // 添加日志
//// String operateContent = Constants.operateContent(uri);
//// if (null != operateContent) {
//// String url = uri.substring(uri.indexOf("background"));
//// String ip = request.getRemoteAddr();
//// Integer userId = ((SystemUserForm) obj).getId();
//// SystemLoggerForm form = new SystemLoggerForm();
//// form.setUserId(userId);
//// form.setIp(ip);
//// form.setOperateContent(operateContent);
//// form.setUrl(url);
//// this.systemLoggerService.edit(form);
// }
// }
// }
// }
//
// Map paramsMap = request.getParameterMap();
//
// for (Iterator<Map.Entry> it = paramsMap.entrySet().iterator(); it
// .hasNext();) {
// Map.Entry entry = it.next();
// Object[] values = (Object[]) entry.getValue();
// for (Object obj : values) {
// if (!DataUtil.isValueSuccessed(obj)) {
// throw new RuntimeException("有非法字符:" + obj);
// }
// }
// }
//
// return super.preHandle(request, response, handler);
}
}

Ładowanie…
Anuluj
Zapisz