This commit is contained in:
gongjiale 2024-12-02 14:31:15 +08:00
commit 27479a94be
11 changed files with 144 additions and 24 deletions

View File

@ -5,6 +5,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.framework.security.service.SysLoginService; import com.ruoyi.framework.security.service.SysLoginService;
import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.service.ISysUserService;
import com.ruoyi.project.system.utils.AESUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -32,11 +35,11 @@ public class OauthDemo {
* 认证地址应用注册id应用注册key 三个参数因环境不同而不同建议改为从配置文件中读取 * 认证地址应用注册id应用注册key 三个参数因环境不同而不同建议改为从配置文件中读取
*/ */
//认证地址 //认证地址
public static final String BASE_URL = "http://utuum.sd-gold.com:7021/idp/oauth2"; public static final String BASE_URL = "https://iam.sd-port.com:18010/idp/oauth2";
//应用注册id //应用注册id
public static final String CLIENT_ID = "hfxyjwzxjc"; public static final String CLIENT_ID = "hfxyjwzxjc";
//应用注册key //应用注册key
public static final String CLIENT_SECRET = "2c9ecb1b6b1f47d297abb6ffa7ede060"; public static final String CLIENT_SECRET = "f1a1aebeaf24419591d895768fe72328";
//获取access_token的url //获取access_token的url
public static final String GET_ACCESS_TOKEN_URL = BASE_URL + "/getToken"; public static final String GET_ACCESS_TOKEN_URL = BASE_URL + "/getToken";
@ -51,7 +54,9 @@ public class OauthDemo {
*/ */
@RequestMapping("/redirectToAuth") @RequestMapping("/redirectToAuth")
public void reToAuth(HttpServletRequest request, HttpServletResponse response) { public void reToAuth(HttpServletRequest request, HttpServletResponse response) {
String url = request.getRequestURL().toString().replaceAll("/prod-api/redirectToAuth", "/prod-api/getAccountName"); System.out.println("redirectToAuth------------------->"+ request.getRequestURL().toString());
String url = request.getRequestURL().toString().replaceAll("/redirectToAuth", "/LoginSso");
System.out.println("redirectToAuth------------------->"+url);
String re_url = BASE_URL + "/authorize?redirect_uri=" + url + "&state=sso&client_id=" + CLIENT_ID + "&response_type=code"; String re_url = BASE_URL + "/authorize?redirect_uri=" + url + "&state=sso&client_id=" + CLIENT_ID + "&response_type=code";
try { try {
response.sendRedirect(re_url); response.sendRedirect(re_url);
@ -60,6 +65,8 @@ public class OauthDemo {
} }
} }
@Autowired
private ISysUserService sysUserService;
/** /**
* 此方法最后取到账号acc的值后需要各系统进行登录逻辑处理 * 此方法最后取到账号acc的值后需要各系统进行登录逻辑处理
* @param code 用户名和密码认证通过后返回的codeaccess_token,从而获取到用户或账号信息 * @param code 用户名和密码认证通过后返回的codeaccess_token,从而获取到用户或账号信息
@ -101,9 +108,11 @@ public class OauthDemo {
return null; return null;
} }
System.out.println("the acc is :" + acc); System.out.println("the acc is :" + acc);
String s = loginService.loginNoCaptcha(userName, passWord, null);
String tokenNew = loginService.loginNoCode(acc,"123456",null,null);
AjaxResult success = AjaxResult.success(); AjaxResult success = AjaxResult.success();
success.put(Constants.TOKEN,s); success.put(Constants.TOKEN,tokenNew);
success.put("mgs","登录成功"); success.put("mgs","登录成功");
return success; return success;
} }

View File

@ -36,7 +36,7 @@ public class EquTask {
/** /**
* 港口原有设备对接 * 港口原有设备对接
*/ */
// @Scheduled(fixedRate = 10000) @Scheduled(fixedRate = 100000)
public void equ(){ public void equ(){
String hash = "16EA8A305FB58BE0730DD67F04F022F4"; String hash = "16EA8A305FB58BE0730DD67F04F022F4";

View File

@ -107,10 +107,10 @@ public class DataScopeAspect
{ {
continue; continue;
} }
if (!StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) // if (!StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission)))
{ // {
continue; // continue;
} // }
if (DATA_SCOPE_ALL.equals(dataScope)) if (DATA_SCOPE_ALL.equals(dataScope))
{ {
sqlString = new StringBuilder(); sqlString = new StringBuilder();
@ -135,7 +135,7 @@ public class DataScopeAspect
} }
else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
{ {
sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or FIND_IN_SET ( {} ,ancestors ) <> 0 )", deptAlias, user.getDeptId(), user.getDeptId())); sqlString.append(StringUtils.format(" {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or FIND_IN_SET ( {} ,ancestors ) <> 0 )", deptAlias, user.getDeptId(), user.getDeptId()));
} }
else if (DATA_SCOPE_SELF.equals(dataScope)) else if (DATA_SCOPE_SELF.equals(dataScope))
{ {
@ -164,7 +164,7 @@ public class DataScopeAspect
if (StringUtils.isNotNull(params) && params instanceof BaseEntity) if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
{ {
BaseEntity baseEntity = (BaseEntity) params; BaseEntity baseEntity = (BaseEntity) params;
baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")"); baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString + ")");
} }
} }
} }

View File

@ -111,7 +111,7 @@ public class SecurityConfig
.authorizeHttpRequests((requests) -> { .authorizeHttpRequests((requests) -> {
permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
// 对于登录login 注册register 验证码captchaImage 允许匿名访问 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
requests.antMatchers("/login","/bbc/**", requests.antMatchers("/singleSign","/login","/bbc/**",
"/register", "/captchaImage","/outside/*","/redirectToAuth","/getAccountName").permitAll() "/register", "/captchaImage","/outside/*","/redirectToAuth","/getAccountName").permitAll()
// 静态资源可匿名访问 // 静态资源可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()

View File

@ -75,7 +75,7 @@ public class AsyncFactory
logininfor.setStatus(Constants.FAIL); logininfor.setStatus(Constants.FAIL);
} }
// 插入数据 // 插入数据
SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor); // SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor);
} }
}; };
} }

View File

@ -6,6 +6,8 @@ import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.ruoyi.common.constant.CacheConstants; import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
@ -101,6 +103,55 @@ public class SysLoginService
} }
/**
* 登录验证
*
* @param username 用户名
* @param password 密码
* @param code 验证码
* @param uuid 唯一标识
* @return 结果
*/
public String loginNoCode(String username, String password, String code, String uuid)
{
// 验证码校验
// validateCaptcha(username, code, uuid);
// 登录前置校验
// loginPreCheck(username, password);
// 用户验证
Authentication authentication = null;
try
{
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
AuthenticationContextHolder.setContext(authenticationToken);
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
authentication = authenticationManager.authenticate(authenticationToken);
}
catch (Exception e)
{
if (e instanceof BadCredentialsException)
{
// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
throw new UserPasswordNotMatchException();
}
else
{
// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
throw new ServiceException(e.getMessage());
}
}
finally
{
AuthenticationContextHolder.clearContext();
}
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
recordLoginInfo(loginUser.getUserId());
// 生成token
return tokenService.createToken(loginUser);
}
/** /**
* 无需验证码登录 * 无需验证码登录
* 重写login方法将验证码模块去掉 * 重写login方法将验证码模块去掉
@ -115,7 +166,9 @@ public class SysLoginService
Authentication authentication = null; Authentication authentication = null;
try try
{ {
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); // UserDetails userDetails = userDetailsService.loadUserByUsername(username);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, null);
AuthenticationContextHolder.setContext(authenticationToken); AuthenticationContextHolder.setContext(authenticationToken);
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
authentication = authenticationManager.authenticate(authenticationToken); authentication = authenticationManager.authenticate(authenticationToken);
@ -133,14 +186,52 @@ public class SysLoginService
throw new ServiceException(e.getMessage()); throw new ServiceException(e.getMessage());
} }
} }
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); // AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
LoginUser loginUser = (LoginUser) authentication.getPrincipal(); LoginUser loginUser = (LoginUser) authentication.getPrincipal();
System.out.println(loginUser);
recordLoginInfo(loginUser.getUserId()); recordLoginInfo(loginUser.getUserId());
// 生成token // 生成token
return tokenService.createToken(loginUser); return tokenService.createToken(loginUser);
} }
/**
* 不加验证码登录
*
* @param username 用户名
* @param password 密码
* @param uuid 唯一标识
* @return 结果
*/
public String loginNoCode(String username, String password, String uuid)
{
// 用户验证
Authentication authentication = null;
try
{
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
authentication = authenticationManager
.authenticate(new UsernamePasswordAuthenticationToken(username, password));
}
catch (Exception e)
{
if (e instanceof BadCredentialsException)
{
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
throw new UserPasswordNotMatchException();
}
else
{
// AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
throw new ServiceException(e.getMessage());
}
}
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
recordLoginInfo(loginUser.getUserId());
// 生成token
return tokenService.createToken(loginUser);
}
/** /**
* 校验验证码 * 校验验证码

View File

@ -53,13 +53,15 @@ public class UserDetailsServiceImpl implements UserDetailsService
throw new ServiceException(MessageUtils.message("user.blocked")); throw new ServiceException(MessageUtils.message("user.blocked"));
} }
passwordService.validate(user); // passwordService.validate(user);
return createLoginUser(user); return createLoginUser(user);
} }
public UserDetails createLoginUser(SysUser user) public UserDetails createLoginUser(SysUser user)
{ {
return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user)); LoginUser loginUser = new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
System.out.println(loginUser.toString());
return loginUser;
} }
} }

View File

@ -4,6 +4,7 @@ package com.ruoyi.project.system.controller;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.banboocloud.Codec.BamboocloudFacade; import com.banboocloud.Codec.BamboocloudFacade;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.reflect.ReflectUtils; import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.domain.SysUser;
@ -192,7 +193,7 @@ public class BbcController extends BaseController {
logger.info("reqmap---------->"+reqmap); logger.info("reqmap---------->"+reqmap);
SysUser user = new SysUser(); SysUser user = new SysUser();
user.setUserName(userName); user.setUserName(userName);
user.setPassword(pass); user.setPassword(SecurityUtils.encryptPassword(("123456")));
user.setPhonenumber(mobile); user.setPhonenumber(mobile);
user.setStatus(status); user.setStatus(status);
user.setNickName(nickName); user.setNickName(nickName);
@ -271,7 +272,7 @@ public class BbcController extends BaseController {
logger.info("reqmap---------->"+reqmap); logger.info("reqmap---------->"+reqmap);
SysUser user = new SysUser(); SysUser user = new SysUser();
user.setUserName(userName); user.setUserName(userName);
user.setPassword(pass); user.setPassword(SecurityUtils.encryptPassword(("123456")));
user.setPhonenumber(mobile); user.setPhonenumber(mobile);
user.setStatus(status); user.setStatus(status);
user.setNickName(nickName); user.setNickName(nickName);

View File

@ -39,9 +39,7 @@ public class SysDeptController extends BaseController
/** /**
* 获取部门列表 * 获取部门列表
*/ */
@PreAuthorize("@ss.hasPermi('system:dept:list')")
@GetMapping("/list") @GetMapping("/list")
@DataScope(deptAlias="d", permission="4")
public AjaxResult list(SysDept dept) public AjaxResult list(SysDept dept)
{ {
List<SysDept> depts = deptService.selectDeptList(dept); List<SysDept> depts = deptService.selectDeptList(dept);

View File

@ -1,6 +1,7 @@
package com.ruoyi.project.system.controller; package com.ruoyi.project.system.controller;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import com.ruoyi.project.system.utils.AESUtil; import com.ruoyi.project.system.utils.AESUtil;
@ -52,6 +53,22 @@ public class SysLoginController
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
return ajax; return ajax;
} }
/**
* 登录方法
*
* @param loginBody 登录信息
* @return 结果
*/
@PostMapping("/singleSign")
public AjaxResult singleSign(@RequestBody LoginBody loginBody) throws Exception {
AjaxResult ajax = AjaxResult.success();
// 生成令牌
String password= AESUtil.decrypt(loginBody.getPassword());
String token = loginService.loginNoCode(loginBody.getUsername().toLowerCase(Locale.ROOT),password, loginBody.getCode(),
loginBody.getUuid());
ajax.put(Constants.TOKEN, token);
return ajax;
}
/** /**
* 获取用户信息 * 获取用户信息

View File

@ -1,13 +1,15 @@
package com.business.message.forest; package com.business.message.forest;
import com.dtflys.forest.annotation.Body; import com.dtflys.forest.annotation.Body;
import com.dtflys.forest.annotation.JSONBody;
import com.dtflys.forest.annotation.Post; import com.dtflys.forest.annotation.Post;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
public interface MyClient { public interface MyClient {
@Post("http://218.58.79.146:13080/prod-api/outside/sensorData") @Post("http://10.167.96.13/prod-api/outside/sensorData")
String receiveSensorData(@Body("data") String data); // @Post("http://127.0.0.1:8080/outside/sensorData")
String receiveSensorData(@JSONBody String data);
} }