Browse Source

admin免登录跳转company

luolinsong 1 tháng trước cách đây
mục cha
commit
0de93a0a9a

+ 22 - 6
fs-company/src/main/java/com/fs/company/controller/company/CompanyLoginController.java

@@ -14,16 +14,15 @@ import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.CompanyLoginService;
 import com.fs.framework.service.CompanyPermissionService;
 import com.fs.framework.service.TokenService;
+import com.fs.framework.service.UserDetailsBynameServiceImpl;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.service.ISysConfigService;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * 登录验证
@@ -48,6 +47,8 @@ public class CompanyLoginController
     private RedisCache redisCache;
     @Autowired
     private ISysConfigService configService;
+    @Autowired
+    private UserDetailsBynameServiceImpl userDetailsBynameService;
 
     /**
      * 登录方法
@@ -70,6 +71,21 @@ public class CompanyLoginController
         return ajax;
     }
 
+    @PostMapping("/login2")
+    public AjaxResult login2(@RequestBody LoginBody loginBody) {
+
+        UserDetails userDetails = userDetailsBynameService.loadUserByUsername(loginBody.getUsername());
+        if (ObjectUtils.isEmpty(userDetails)) {
+            AjaxResult ajax = AjaxResult.error("账号不存在");
+            return ajax;
+        }
+        AjaxResult ajax = AjaxResult.success();
+        // 生成令牌
+        String token = loginService.login2(loginBody.getUsername());
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
+    }
+
 
     /**
      * 获取用户信息

+ 3 - 1
fs-company/src/main/java/com/fs/framework/config/SecurityConfig.java

@@ -100,7 +100,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/chat/upload/**","/login", "/register", "/captchaImage").anonymous()
+                .antMatchers("/chat/upload/**","/login","/login2", "/register", "/captchaImage").anonymous()
                 .antMatchers(
                         HttpMethod.GET,
                         "/",
@@ -132,6 +132,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/druid/**").anonymous()
                 .antMatchers("/qw/data/**").anonymous()
                 .antMatchers("/qw/user/selectCloudByCompany").anonymous()
+                //确保登录接口允许 “匿名用户” 和 “已认证用户” 均可访问
+                .antMatchers("/login2").permitAll()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()
                 .and()

+ 17 - 2
fs-company/src/main/java/com/fs/framework/service/CompanyLoginService.java

@@ -17,6 +17,7 @@ import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
@@ -24,8 +25,8 @@ import java.util.concurrent.TimeUnit;
 
 /**
  * 登录校验方法
- * 
- 
+ *
+
  */
 @Component
 public class CompanyLoginService
@@ -39,6 +40,9 @@ public class CompanyLoginService
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private UserDetailsBynameServiceImpl userDetailsBynameService;
+
     /**
      * 登录验证
      *
@@ -89,6 +93,17 @@ public class CompanyLoginService
         redisCache.setCacheObject("companyId:"+loginUser.getUser().getUserId(),loginUser.getUser().getCompanyId(),604800, TimeUnit.SECONDS);
         // 生成token
         return tokenService.createToken(loginUser);
+
+
     }
 
+    public String login2(String username) {
+        UserDetails userDetails = userDetailsBynameService.loadUserByUsername(username);
+        LoginUser loginUser = (LoginUser) userDetails;
+
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginUser.getUser().getCompanyId(), username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        redisCache.setCacheObject("companyId:" + loginUser.getUser().getUserId(), loginUser.getUser().getCompanyId(), 604800, TimeUnit.SECONDS);
+        // 生成token
+        return tokenService.createToken(loginUser);
+    }
 }

+ 49 - 0
fs-company/src/main/java/com/fs/framework/service/UserDetailsBynameServiceImpl.java

@@ -0,0 +1,49 @@
+package com.fs.framework.service;
+
+
+import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.company.service.ICompanyService;
+import com.fs.framework.security.LoginUser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+/**
+ * 用户验证处理
+ */
+@Service
+public class UserDetailsBynameServiceImpl implements UserDetailsService {
+    private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);
+
+
+    @Autowired
+    private CompanyUserMapper userMapper;
+    @Autowired
+    private CompanyPermissionService permissionService;
+    @Autowired
+    private ICompanyService companyService;
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        CompanyUser user = userMapper.selectUserByUserName(username);
+        if (StringUtils.isNull(user)) {
+            log.info("登录用户:{} 不存在.", username);
+            throw new ServiceException("登录用户:" + username + " 不存在");
+        }
+
+        return createLoginUser(user);
+    }
+
+    public UserDetails createLoginUser(CompanyUser user) {
+        return new LoginUser(user, permissionService.getMenuPermission(user), companyService.selectCompanyById(user.getCompanyId()));
+    }
+
+
+}

+ 2 - 0
fs-company/src/main/java/com/fs/framework/service/UserDetailsServiceImpl.java

@@ -13,6 +13,7 @@ import com.fs.framework.security.SecurityUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
@@ -24,6 +25,7 @@ import org.springframework.stereotype.Service;
 
  */
 @Service
+@Primary
 public class UserDetailsServiceImpl implements UserDetailsService
 {
     private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);