Quellcode durchsuchen

一体化接口

lin vor 4 Jahren
Ursprung
Commit
955736f53f

+ 8 - 2
smart-city-platform/src/main/java/com/bz/smart_city/commom/security/WebSecurityConfig.java

@@ -3,6 +3,7 @@ package com.bz.smart_city.commom.security;
 import com.bz.smart_city.commom.security.assistant.MemberLoginSecurityConfig;
 import com.bz.smart_city.commom.security.assistant.mobile.MpMobileLoginSecurityConfig;
 import com.bz.smart_city.commom.security.assistant.openid.OpenidSecurityConfig;
+import com.bz.smart_city.commom.security.integration.IntegrationSecurityConfig;
 import com.bz.smart_city.commom.security.mobile.MobileLoginUserDetailService;
 import com.bz.smart_city.commom.security.mobile.MobileSecurityConfig;
 import com.bz.smart_city.commom.security.smsCode.SmsCodeCheckUserFilter;
@@ -74,6 +75,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
     private SmsCodeCheckUserFilter smsCodeCheckUserFilter;
     @Autowired
     private SmsCodeSecurityConfig smsCodeSecurityConfig;
+    @Autowired
+    private IntegrationSecurityConfig integrationSecurityConfig;
 
     @Bean
     public PasswordEncoder passwordEncoder() {
@@ -102,7 +105,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .antMatchers("/printinvoice/InvoicePrintRequest","/common/getAllArea","/mobile/assistant/getMeterTypes")
                 .antMatchers("/waterMeter/getMeterByDeviceNo")
                 .antMatchers("/device/synArchies","/installPlan/syncPlan")
-                .antMatchers("/druid/**").antMatchers("/syncData/**");
+                .antMatchers("/druid/**").antMatchers("/syncData/**")
+                .antMatchers("/integration/user/save","/integration/user/del");
 
     }
 
@@ -140,7 +144,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .and()
                 .apply(openidSecurityConfig)
                 .and()
-                .apply(smsCodeSecurityConfig);
+                .apply(smsCodeSecurityConfig)
+                .and()
+                .apply(integrationSecurityConfig);
 
     }
 

+ 71 - 0
smart-city-platform/src/main/java/com/bz/smart_city/commom/security/integration/IntegrationLoginAuthenticationFilter.java

@@ -0,0 +1,71 @@
+package com.bz.smart_city.commom.security.integration;
+
+import com.bz.smart_city.commom.security.mobile.MobileLoginAuthenticationToken;
+import org.springframework.security.authentication.AuthenticationServiceException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.util.Assert;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Base64;
+
+public class IntegrationLoginAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
+    // ~ Static fields/initializers
+    // =====================================================================================
+
+    public static final String SPRING_SECURITY_FORM_SOURCE_KEY = "source";
+    public static final String SPRING_SECURITY_FORM_CODE_KEY = "code";
+
+    private String sourceParameter = SPRING_SECURITY_FORM_SOURCE_KEY;
+    private String codeParameter = SPRING_SECURITY_FORM_CODE_KEY;
+    private boolean postOnly = true;
+
+    // ~ Constructors
+    // ===================================================================================================
+
+    public IntegrationLoginAuthenticationFilter() {
+        super(new AntPathRequestMatcher("/integration/auth/login", "POST"));
+    }
+
+    // ~ Methods
+    // ========================================================================================================
+
+    @Override
+    public Authentication attemptAuthentication(HttpServletRequest request,
+                                                HttpServletResponse response) throws AuthenticationException {
+        if (postOnly && !request.getMethod().equals("POST")) {
+            throw new AuthenticationServiceException(
+                    "Authentication method not supported: " + request.getMethod());
+        }
+
+        String source = request.getParameter(sourceParameter);
+        String code = request.getParameter(codeParameter);
+
+        if (source == null) {
+            source = "";
+        }
+
+        if (code == null) {
+            code = "";
+        }
+        byte[] base64decodedBytes = Base64.getDecoder().decode(code);
+
+        String mobile = new String(base64decodedBytes);
+        String password = "";
+
+        MobileLoginAuthenticationToken authRequest = new MobileLoginAuthenticationToken(mobile, password);
+
+        // Allow subclasses to set the "details" property
+        setDetails(request, authRequest);
+
+        return this.getAuthenticationManager().authenticate(authRequest);
+    }
+
+
+    protected void setDetails(HttpServletRequest request, MobileLoginAuthenticationToken authRequest) {
+        authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
+    }
+}

+ 52 - 0
smart-city-platform/src/main/java/com/bz/smart_city/commom/security/integration/IntegrationSecurityConfig.java

@@ -0,0 +1,52 @@
+package com.bz.smart_city.commom.security.integration;
+
+import com.bz.smart_city.commom.security.mobile.MobileLoginUserDetailService;
+import com.bz.smart_city.commom.security.smsCode.SmsCodeCheckUserFilter;
+import com.bz.smart_city.commom.security.smsCode.SmsCodeLoginAuthenticationFilter;
+import com.bz.smart_city.commom.security.smsCode.SmsCodeLoginAuthenticationProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.DefaultSecurityFilterChain;
+import org.springframework.security.web.authentication.AuthenticationFailureHandler;
+import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.stereotype.Component;
+
+@Component
+public class IntegrationSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {
+    @Autowired
+    @Qualifier("userAuthenticationSuccessHandler")
+    private AuthenticationSuccessHandler authenticationSuccessHandler;
+    @Autowired
+    @Qualifier("userAuthenticationFailureHandler")
+    private AuthenticationFailureHandler authenticationFailureHandler;
+    @Autowired
+    private MobileLoginUserDetailService userDetailsService;
+    @Autowired
+    private SmsCodeCheckUserFilter smsCodeCheckUserFilter;
+    @Bean
+    public PasswordEncoder passwordEncoder() {
+        return new BCryptPasswordEncoder();
+    }
+
+
+
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        IntegrationLoginAuthenticationFilter integrationLoginAuthenticationFilter = new IntegrationLoginAuthenticationFilter();
+        integrationLoginAuthenticationFilter.setAuthenticationManager(http.getSharedObject(AuthenticationManager.class));
+        integrationLoginAuthenticationFilter.setAuthenticationSuccessHandler(authenticationSuccessHandler);
+        integrationLoginAuthenticationFilter.setAuthenticationFailureHandler(authenticationFailureHandler);
+
+        SmsCodeLoginAuthenticationProvider smsCodeLoginAuthenticationProvider = new SmsCodeLoginAuthenticationProvider();
+        smsCodeLoginAuthenticationProvider.setUserDetailsService(userDetailsService);
+        http.authenticationProvider(smsCodeLoginAuthenticationProvider)
+                .addFilterAfter(integrationLoginAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
+    }
+}

+ 62 - 0
smart-city-platform/src/main/java/com/bz/smart_city/controller/IntegrationAuthController.java

@@ -0,0 +1,62 @@
+package com.bz.smart_city.controller;
+
+import com.bz.smart_city.commom.model.AjaxMessage;
+import com.bz.smart_city.commom.model.ResultStatus;
+import com.bz.smart_city.entity.User;
+import com.bz.smart_city.service.DeleteCallback;
+import com.bz.smart_city.service.UserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+
+@Controller
+@ResponseBody
+@RequestMapping("integration")
+@Api(tags = "一体化")
+public class IntegrationAuthController {
+
+    @Autowired
+    private UserService userService;
+
+    @PostMapping("/auth/login")
+    @ApiOperation(value = "手机验证码登录")
+    public AjaxMessage smsCodeLogin(
+            @ApiParam(value = "来源", required = true, defaultValue = "balikun") @RequestParam(required = true) String source,
+            @ApiParam(value = "code", required = true, defaultValue = "MTg1NjU1NzIwMTA=") @RequestParam(required = true) String code,
+            HttpServletRequest httpServletRequest
+    ) {
+
+        //这里只写控制层为了提供swagger api, 具体实现逻辑在spring security(com.bz.smart_city.commom.security.smsCode)
+        return new AjaxMessage<>(ResultStatus.OK);
+    }
+
+    @PostMapping("/user/save")
+    @ApiOperation(value = "保存用户")
+    public AjaxMessage saveUser(
+            @ApiParam(value = "用户名", required = true) @RequestParam(required = true) String username,
+            @ApiParam(value = "手机号码", required = true) @RequestParam(required = true) String mobilePhone
+    ) {
+
+        userService.addIntegrationUser(username, mobilePhone);
+        return new AjaxMessage(ResultStatus.OK);
+    }
+
+
+    @DeleteMapping("/user/del")
+    @ApiOperation(value = "删除用户")
+    public AjaxMessage delUser(
+            @ApiParam(value = "手机号码", required = true) @RequestParam(required = true) String mobilePhone
+    ) {
+        userService.delectIntegrationUser(mobilePhone);
+        return new AjaxMessage(ResultStatus.OK);
+    }
+}

+ 4 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/UserService.java

@@ -117,4 +117,8 @@ public interface UserService {
     void bindOpenId(String openId);
 
     User findUserByName(String name, BigInteger sitId);
+
+    void addIntegrationUser(String username, String mobilePhone);
+
+    void delectIntegrationUser(String mobilePhone);
 }

+ 7 - 2
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/PermissionServiceImpl.java

@@ -132,8 +132,13 @@ public class PermissionServiceImpl implements PermissionService {
             }
 
         } else {
-            List<Integer> sysIdList = channelMapper.getChannelBySiteId(loginUser.getSiteId());
-            list = permissionMapper.getAllPermission(null, 1, sysIdList);
+            //List<Integer> sysIdList = channelMapper.getChannelBySiteId(loginUser.getSiteId());
+            //list = permissionMapper.getAllPermission(null, 1, sysIdList);
+            if (loginUser.getSiteType() == 1) {
+                list = permissionMapper.getPermissionBySiteAdmin(loginUser.getSiteId(),null,1,null);
+            }else {
+                list = permissionMapper.getPermissionBySiteAdmin(loginUser.getSiteId(),null,null,1);
+            }
         }
 
         //遍历所有节点的父类ID集合

+ 95 - 0
smart-city-platform/src/main/java/com/bz/smart_city/service/impl/UserServiceImpl.java

@@ -618,4 +618,99 @@ public class UserServiceImpl implements UserService {
     public User findUserByName(String name, BigInteger sitId) {
         return userMapper.findUserByName(name,sitId);
     }
+
+    @Override
+    public void addIntegrationUser(String username, String mobilePhone) {
+        User userTemp = userMapper.findUserByMobile(mobilePhone);
+        if (userTemp != null) {
+            User user = new User();
+            user.setId(userTemp.getId());
+            user.setMobilePhone(mobilePhone);
+            user.setUpdateBy("admin");
+            user.setUpdateDate(LocalDateTime.now());
+            userMapper.update(user);
+        }else {
+            //添加用户
+            User user = new User();
+            user.setUsername(username);
+            user.setPassword("");
+            user.setMobilePhone(mobilePhone);
+            //user.setName(name);
+            user.setStatus(1);
+            //user.setOrganId(organId != null ? organId : -1);
+            user.setCreateBy("admin");
+            user.setCreateDate(LocalDateTime.now());
+            user.setUpdateBy("admin");
+            user.setUpdateDate(LocalDateTime.now());
+            user.setIsSuperAdmin(0);
+            //user.setType(loginUser.getType() == 1 ? 2 : 3);
+            userMapper.insertSelective(user);
+
+
+            SiteUser siteUser = new SiteUser();
+            siteUser.setSiteId(1);
+            siteUser.setUserId(user.getId());
+            siteUser.setStatus(1);
+            siteUser.setIsAdmin(0);
+            siteUser.setOrganId(-1);
+            siteUser.setType(3);
+            siteUser.setCreateBy("admin");
+            siteUser.setCreateDate(LocalDateTime.now());
+            siteUser.setUpdateBy("admin");
+            siteUser.setUpdateDate(LocalDateTime.now());
+            siteUserMapper.insert(siteUser);
+
+            //添加用户角色关系
+            UserRole userRole = new UserRole();
+            userRole.setUid(user.getId());
+            userRole.setRid(25);
+            userRole.setStatus(1);
+            userRole.setCreateBy("admin");
+            userRole.setCreateDate(LocalDateTime.now());
+            userRole.setUpdateBy("admin");
+            userRole.setUpdateDate(LocalDateTime.now());
+            userRoleMapper.insert(userRole);
+
+            //添加用户角色关系
+            UserRoleProgram userRoleProgram = new UserRoleProgram();
+            userRoleProgram.setUserRoleId(userRole.getId());
+            userRoleProgram.setProgramId(77);
+            userRoleProgram.setStatus(1);
+            userRoleProgram.setCreateBy("admin");
+            userRoleProgram.setDateCreate(LocalDateTime.now());
+            userRoleProgram.setUpdateBy("admin");
+            userRoleProgram.setDateUpdate(LocalDateTime.now());
+            userRoleProgramService.insertSelective(userRoleProgram);
+        }
+    }
+
+    @Override
+    public void delectIntegrationUser(String mobilePhone) {
+        User userTemp = userMapper.findUserByMobile(mobilePhone);
+        if (userTemp != null) {
+            Integer id = userTemp.getId();
+            User user = new User();
+            user.setId(id);
+            user.setStatus(0);
+            user.setUpdateBy("system");
+            user.setUpdateDate(LocalDateTime.now());
+
+
+            int i = this.update(user);
+            //删除站点用户关系
+            int j = userMapper.deleteByUserId(id, "system");
+
+            //删除用户数据项关系
+            userRoleProgramService.delByUserId(id, "system");
+
+            //删除用户角色
+            userRoleMapper.deleteByUserId(id, "system");
+
+            // 删除用户扩展信息
+            UserExtendInfo obj = new UserExtendInfo();
+            obj.setUserId(id);
+            obj.setStatus(0);
+            int result = userExtendInfoMapper.update(obj);
+        }
+    }
 }

+ 1 - 1
smart-city-platform/src/main/resources/application.properties

@@ -1,2 +1,2 @@
 #开发环境:dev  测试环境:sit  线上环境:prd  演示环境:uat
-spring.profiles.active=prd
+spring.profiles.active=dev

+ 21 - 0
smart-city-platform/src/test/java/com/bz/smart_city/ScTest.java

@@ -27,6 +27,8 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
 
 import javax.validation.constraints.Null;
 import java.io.IOException;
@@ -399,6 +401,25 @@ public class ScTest {
         //hlhtService.equipmentMeter("311000002201","10","0","3412345131235","3412345131234");
     }
 
+    @Test
+    public void base64(){
+
+        String a =  new BASE64Encoder().encode("18565572010".getBytes());
+        System.out.println(a);
+        try {
+            String b = String.valueOf(new BASE64Decoder().decodeBuffer(a));
+            System.out.println(b);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        String c =  Base64.getEncoder().encodeToString("18565572020".getBytes());
+        System.out.println(c);
+        byte[] base64decodedBytes = Base64.getDecoder().decode(c);
+
+        System.out.println("原始字符串: " + new String(base64decodedBytes));
+    }
+