diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java index b7907cc..3518345 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java @@ -10,6 +10,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginSiteUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.encrypt.EncryptUtil; import com.ruoyi.common.utils.ip.IpUtils; @@ -29,6 +30,10 @@ import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; @@ -62,6 +67,9 @@ public class SsoService { @Autowired private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private UserDetailsService userDetailsService; + //一体机,pc个人,企业 @Value("${lc_web_auth.appId}") String webAppId; @@ -372,14 +380,27 @@ public class SsoService { //模拟登录sysuser public String loginSysUser(SysUser sysUser, String userName){ - LoginUser loginUser = new LoginUser(); - loginUser.setUserId(sysUser.getUserId()); - loginUser.setUser(sysUser); + Authentication authentication = authenticateLocalUser(userName); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); // 生成token return tokenService.createTokenHourTwo(loginUser); } + /** + * 获取用户权限 + * @param localUsername + * @return + */ + private Authentication authenticateLocalUser(String localUsername) { + try { + UserDetails userDetails = userDetailsService.loadUserByUsername(localUsername); + return new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities()); + } catch (Exception e) { + throw new ServiceException("本地用户认证失败:" + e.getMessage()); + } + } + //获取用户信息 private JSONObject getUserInfo(String url, String token, String params) { try {