package com.panzhihua.auth.service.impl; import java.util.Date; import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComActVO; import com.panzhihua.common.model.vos.user.SysOperLogVO; import com.panzhihua.common.service.user.UserService; import com.panzhihua.common.utlis.IPUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import com.panzhihua.auth.service.LoginService; import com.panzhihua.common.constants.TokenConstant; import com.panzhihua.common.constants.UserConstants; import com.panzhihua.common.model.vos.LoginReturnVO; import com.panzhihua.common.model.vos.LoginReturnsVO; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.utlis.JWTTokenUtil; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.bind.annotation.RequestParam; import static java.util.Objects.nonNull; /** * @program: springcloud_k8s_panzhihuazhihuishequ * @description: token * @author: huang.hongfa weixin hhf9596 qq 959656820 * @create: 2020-11-19 17:07 **/ @Service public class LoginServiceImpl implements LoginService { @Resource private AuthenticationManager authenticationManager; @Autowired private StringRedisTemplate redisTemplate; @Resource private UserService userService; /** * 微信小程序登录 * * @param openId * 微信标识 * @return jwt */ @Override public LoginReturnVO loginApplets(String openId,String appId) { Authentication authentication = null; authentication = authenticationManager .authenticate(new UsernamePasswordAuthenticationToken(openId + "_1"+"_"+appId, UserConstants.PASSWORD)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } /** * 小程序用户登出 * * @param token * 登录用户token */ @Override public void logoutApplets(String token) { ValueOperations valueOperations = redisTemplate.opsForValue(); token = token.replaceAll(TokenConstant.TOKEN_PRE, ""); valueOperations.set(UserConstants.LOGOUT_TOKEN + token, token, TokenConstant.EXPIRETIME, TimeUnit.MINUTES); } /** * 运营后台登录 * * @param account * 账户 * @param password * 密码 * @return 登录结果 */ @Override public LoginReturnVO loginAppletsBackStage(String account, String password,String appid) { Authentication authentication = null; authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_2"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } /** * 社区后台登录 * * @param account * 账户 * @param password * 密码 * @return 登录结果 */ @Override public LoginReturnVO loginCommunityBackage(String account, String password,String appId) { Authentication authentication = null; authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_3"+"_"+appId, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); ComActVO comActVO = loginUser.getComActVO(); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); loginReturnVO.setCommunityId(loginUser.getCommunityId()); if (nonNull(comActVO)) { loginReturnVO.setLat(comActVO.getLat()); loginReturnVO.setLng(comActVO.getLng()); } //保存登录日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); SysOperLogVO operlog = new SysOperLogVO(); operlog.setTitle("登录操作"); // 操作模块 operlog.setBusinessType(1); // 操作类型 operlog.setMethod("com.panzhihua.community_backstage.api.LoginApi.login"); // 请求方法 operlog.setAccount(loginUser.getAccount()); operlog.setOperName(loginUser.getName()); // 请求用户名称 operlog.setOperIp(IPUtil.getIpAddress(request)); // 请求IP operlog.setOperUrl(request.getRequestURI()); // 请求URI operlog.setRequestMethod(request.getMethod()); operlog.setOperLocation(IPUtil.getIpBelongAddress(request)); operlog.setOperTime(new Date()); // 创建时间 operlog.setCommunityId(loginUser.getCommunityId()); userService.addOperLog(operlog); return loginReturnVO; } /** * 商家后台登录 * * @param account * 账户 * @param password * 密码 * @return 登录结果 */ @Override public LoginReturnVO loginShopBackStage(String account, String password,String appId) { Authentication authentication = null; authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_5"+"_"+appId, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); ComActVO comActVO = loginUser.getComActVO(); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); loginReturnVO.setCommunityId(loginUser.getCommunityId()); if (nonNull(comActVO)) { loginReturnVO.setLat(comActVO.getLat()); loginReturnVO.setLng(comActVO.getLng()); } //保存登录日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); SysOperLogVO operlog = new SysOperLogVO(); operlog.setTitle("登录操作"); // 操作模块 operlog.setBusinessType(1); // 操作类型 operlog.setMethod("com.panzhihua.community_backstage.api.LoginApi.loginShopBackStage"); // 请求方法 operlog.setAccount(loginUser.getAccount()); operlog.setOperName(loginUser.getName()); // 请求用户名称 operlog.setOperIp(IPUtil.getIpAddress(request)); // 请求IP operlog.setOperUrl(request.getRequestURI()); // 请求URI operlog.setRequestMethod(request.getMethod()); operlog.setOperLocation(IPUtil.getIpBelongAddress(request)); operlog.setOperTime(new Date()); // 创建时间 operlog.setCommunityId(loginUser.getCommunityId()); userService.addOperLog(operlog); return loginReturnVO; } /** * 大数据统计平台(区、街道、社区三层登陆接口) * * @param account * 账户 * @param password * 密码 * @author manailin * @return 登录结果 * @date 2021-5-13 10:56 */ @Override public LoginReturnVO loginBigDataBackStage(String account, String password,String appid) { Authentication authentication = null; authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_8"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } /** * 商家后台登录 * * @param account * 账户 * @param password * 密码 * @return 登录结果 */ @Override public LoginReturnsVO loginGridApp(String account, String password,String appid) { Authentication authentication = null; authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_6"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnsVO loginReturnVO = new LoginReturnsVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); loginReturnVO.setUserId(loginUser.getUserId()); return loginReturnVO; } /** * 商家后台登录 * * @param account * 账户 * @param password * 密码 * @return 登录结果 */ @Override public LoginReturnVO loginGridBackstage(String account, String password,String appid) { Authentication authentication = null; authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_7"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } @Override public LoginReturnVO loginCgBackage(String account, String password,String appid){ Authentication authentication = null; authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_9"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } @Override public LoginReturnsVO loginAlarmApp(String account, String password,String appid) { Authentication authentication = null; authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_10"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnsVO loginReturnVO = new LoginReturnsVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); loginReturnVO.setUserId(loginUser.getUserId()); return loginReturnVO; } /** * 便民服务商家后台登录 * @param account 账户 * @param password 密码 * @return 登录结果 */ @Override public LoginReturnVO loginMerchantBackStage(String account, String password,String appid) { Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_10"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } /** * 西区大屏登录 * @param account 账号 * @param password 密码 * @return 登录结果 */ @Override public LoginReturnVO loginXQDP(String account, String password,String appid){ Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_15"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } /** * 微商业街用户登录 * @param account 账户 * @param password 密码 * @return 登录结果 */ @Override public LoginReturnVO loginMcsUser(String account, String password,String appid) { Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_11"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } @Override public LoginReturnVO tfLogin(String account, String password, String appid) { Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_16"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } /** * 电动车商城后台用户登录 * * @param account * 账户 * @param password * 密码 * @return 登录结果 */ @Override public LoginReturnVO loginBatteryUser(String account, String password,String appid) { Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(account + "_20"+"_"+appid, password)); LoginUserInfoVO loginUser = (LoginUserInfoVO)authentication.getPrincipal(); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } /** * 三个身边后台用户登录 */ @Override public LoginReturnVO loginThreeAround(Integer userId) { LoginUserInfoVO loginUser = new LoginUserInfoVO(); loginUser.setUserId(userId.longValue()); loginUser.setType(21); String token = JWTTokenUtil.generateToken(loginUser); String refeshToken = JWTTokenUtil.generateRefeshToken(loginUser); LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setToken(token); loginReturnVO.setRefreshToken(refeshToken); return loginReturnVO; } }