Pine 6 лет назад
Родитель
Сommit
c6aeeaf0cc

+ 135 - 137
pine-admin/src/main/java/com/pine/admin/config/ShiroConfig.java

@@ -1,6 +1,5 @@
 package com.pine.admin.config;
 
-import com.pine.admin.shiro.CustomRolesAuthorizationFilter;
 import com.pine.admin.shiro.KickoutSessionControlFilter;
 import com.pine.admin.shiro.ShiroFormAuthenticationFilter;
 import com.pine.admin.shiro.UserRealm;
@@ -8,29 +7,22 @@ import com.sun.jersey.core.util.Base64;
 import org.apache.shiro.cache.ehcache.EhCacheManager;
 import org.apache.shiro.mgt.SecurityManager;
 import org.apache.shiro.session.mgt.SessionManager;
-import org.apache.shiro.spring.LifecycleBeanPostProcessor;
+import org.apache.shiro.session.mgt.eis.MemorySessionDAO;
+import org.apache.shiro.session.mgt.eis.SessionDAO;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
 import org.apache.shiro.web.mgt.CookieRememberMeManager;
 import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
 import org.apache.shiro.web.servlet.SimpleCookie;
 import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
-import org.crazycake.shiro.RedisCacheManager;
-import org.crazycake.shiro.RedisManager;
-import org.crazycake.shiro.RedisSessionDAO;
 import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.web.filter.DelegatingFilterProxy;
 
-import javax.servlet.Filter;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import javax.servlet.Filter;
 
 /**
  * Shiro的配置文件
@@ -39,47 +31,22 @@ import java.util.Map;
  */
 @Configuration
 public class ShiroConfig {
-    private static final String SESSION_KEY = "shiro:session:";
-    private static final String NAME = "custom.name";
-    private static final String VALUE = "/";
-
-    @Bean("shiroFilter")
-    public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager securityManager, @Qualifier("kickoutSessionControlFilter") KickoutSessionControlFilter kickoutSessionControlFilter) {
-        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
-        shiroFilter.setSecurityManager(securityManager);
-        shiroFilter.setLoginUrl("/login");
-        shiroFilter.setLoginUrl("/dealer/login");
-        shiroFilter.setUnauthorizedUrl("/error");
 
-        //注意过滤器配置顺序 不能颠倒
-        //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了,登出后跳转配置的loginUrl
-        Map<String, String> filterMap = new LinkedHashMap<>();
-        // 配置不会被拦截的链接 顺序判断
-        filterMap.put("/swagger/**", "anon");
-        filterMap.put("/v2/api-docs", "anon");
-        filterMap.put("/swagger-ui.html", "anon");
-        filterMap.put("/webjars/**", "anon");
-        filterMap.put("/swagger-resources/**", "anon");
-        filterMap.put("/statics/**", "anon");
-        filterMap.put("/login", "anon");
-        filterMap.put("/wx/**", "anon");
-        filterMap.put("/assets/**", "anon");
-        filterMap.put("/favicon.ico", "anon");
-        filterMap.put("/captcha.jpg", "anon");
-        filterMap.put("/youpai/**", "anon");
-        filterMap.put("/**", "authc");
-        LinkedHashMap<String, Filter> filtsMap = new LinkedHashMap<String, Filter>();
-        filtsMap.put("authc", new ShiroFormAuthenticationFilter());
-        shiroFilter.setFilters(filtsMap);
-        shiroFilter.setFilterChainDefinitionMap(filterMap);
 
-        return shiroFilter;
-    }
-
-    @Bean
-    public CustomRolesAuthorizationFilter rolesAuthorizationFilter() {
-        return new CustomRolesAuthorizationFilter();
-    }
+    /**
+     * 单机环境,session交给shiro管理
+     */
+//    @Bean
+//    @ConditionalOnProperty(prefix = "pine", name = "cluster", havingValue = "false")
+//    public DefaultWebSessionManager sessionManager(@Value("${pine.globalSessionTimeout:3600}") long globalSessionTimeout){
+//        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
+//        sessionManager.setSessionValidationSchedulerEnabled(true);
+//        sessionManager.setSessionIdUrlRewritingEnabled(false);
+//        sessionManager.setSessionValidationInterval(globalSessionTimeout * 1000);
+//        sessionManager.setGlobalSessionTimeout(globalSessionTimeout * 1000);
+//
+//        return sessionManager;
+//    }
 
     /**
      * 使注解生效
@@ -94,26 +61,10 @@ public class ShiroConfig {
         return app;
     }
 
-    @Bean("lifecycleBeanPostProcessor")
-    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
-        return new LifecycleBeanPostProcessor();
-    }
-
-    @Bean("delegatingFilterProxy")
-    public FilterRegistrationBean delegatingFilterProxy() {
-        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
-        DelegatingFilterProxy proxy = new DelegatingFilterProxy();
-        proxy.setTargetFilterLifecycle(true);
-        proxy.setTargetBeanName("shiroFilter");
-        filterRegistrationBean.setFilter(proxy);
-        return filterRegistrationBean;
-    }
-
-
     @Bean
-    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") SecurityManager securityManager) {
+    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() {
         AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
-        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
+        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager());
         return authorizationAttributeSourceAdvisor;
 
     }
@@ -123,122 +74,169 @@ public class ShiroConfig {
      *
      * @return
      */
-    @Bean(name = "myShiroRealm")
-    public UserRealm myShiroRealm(@Qualifier("redisCacheManager") RedisCacheManager redisCacheManager) {
+    @Bean
+    public UserRealm myShiroRealm() {
         UserRealm myShiroRealm = new UserRealm();
-        myShiroRealm.setCacheManager(redisCacheManager);
-        myShiroRealm.setAuthenticationCachingEnabled(false);
-        myShiroRealm.setAuthorizationCachingEnabled(false);
         return myShiroRealm;
     }
 
     /**
-     * Redis集群使用RedisClusterManager,单个Redis使用RedisManager
+     * 微信登陆用户
      *
-     * @param redisProperties
      * @return
      */
-    @Bean(name = "redisManager")
-    public RedisManager redisManager(RedisProperties redisProperties) {
-        RedisManager redisManager = new RedisManager();
-        redisManager.setHost(redisProperties.getHost() + ":" + redisProperties.getPort());
-        redisManager.setPassword(redisProperties.getPassword());
-        return redisManager;
-    }
-
-    @Bean(name = "redisCacheManager")
-    public RedisCacheManager redisCacheManager(@Qualifier("redisManager") RedisManager redisManager) {
-        RedisCacheManager redisCacheManager = new RedisCacheManager();
-        redisCacheManager.setRedisManager(redisManager);
-        //redis中针对不同用户缓存
-        redisCacheManager.setPrincipalIdFieldName("userName");
-        //用户权限信息缓存时间
-        redisCacheManager.setExpire(200000);
-        return redisCacheManager;
-
-    }
-
-    @Bean(name = "redisSessionDAO")
-    public RedisSessionDAO redisSessionDAO(@Qualifier("redisManager") RedisManager redisManager) {
-        RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
-        redisSessionDAO.setExpire(86400);
-        redisSessionDAO.setKeyPrefix(SESSION_KEY);
-        redisSessionDAO.setRedisManager(redisManager);
-        return redisSessionDAO;
-    }
+//    @Bean
+//    public WxOpenIdRealm wxCodeRealm() {
+//        WxOpenIdRealm wxOpenIdRealm = new WxOpenIdRealm();
+//        //小程序使用openid登录使用的realm
+//        return wxOpenIdRealm;
+//    }
 
     /**
-     * //权限管理,配置主要是Realm的管理认证
-     *
-     * @return
+     * 系统自带的Realm管理,主要针对多realm
      */
+//    @Bean
+//    public ModularRealmAuthenticator modularRealmAuthenticator() {
+//        ModularRealmAuthenticator modularRealmAuthenticator = new ModularRealmAuthenticator();
+//        //只要有一个成功就视为登录成功
+//        modularRealmAuthenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());
+//        return modularRealmAuthenticator;
+//    }
+
+    //权限管理,配置主要是Realm的管理认证
     @Bean("securityManager")
-    public SecurityManager securityManager(@Qualifier("myShiroRealm") UserRealm myShiroRealm, @Qualifier("sessionManager") SessionManager sessionManager, @Qualifier("redisCacheManager") RedisCacheManager redisCacheManager) {
+    public SecurityManager securityManager() {
         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-        securityManager.setRealm(myShiroRealm);
-        securityManager.setCacheManager(redisCacheManager);
-        securityManager.setSessionManager(sessionManager);
+        securityManager.setRealm(myShiroRealm());
+        securityManager.setCacheManager(getEhCacheManager());
+        securityManager.setSessionManager(sessionManager());
         securityManager.setRememberMeManager(rememberMeManager());
         //注入Cookie记住我管理器
+//        securityManager.setRememberMeManager(rememberMeManager());
         return securityManager;
     }
 
+    @Bean("shiroFilter")
+    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
+        ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
+        shiroFilter.setSecurityManager(securityManager);
+        shiroFilter.setLoginUrl("/dealer/login");
+//        shiroFilter.setUnauthorizedUrl("/");
+        //注意过滤器配置顺序 不能颠倒
+        //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了,登出后跳转配置的loginUrl
+        Map<String, String> filterMap = new LinkedHashMap<>();
+        // 配置不会被拦截的链接 顺序判断
+        filterMap.put("/swagger/**", "anon");
+        filterMap.put("/v2/api-docs", "anon");
+        filterMap.put("/swagger-ui.html", "anon");
+        filterMap.put("/webjars/**", "anon");
+        filterMap.put("/swagger-resources/**", "anon");
+        filterMap.put("/system/sysuser/*", "anon");
+        filterMap.put("/statics/**", "anon");
+        filterMap.put("/dealer/login", "anon");
+
 
-    @Bean("rememberMeManager")
+        filterMap.put("/youpai/**", "anon");
+        filterMap.put("/favicon.ico", "anon");
+        filterMap.put("/captcha.jpg", "anon");
+//      filterMap.put("/kickout", "anon");
+
+//      <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
+        filterMap.put("/**", "authc");
+
+        //配置shiro默认登录界面地址,前后端分离中登录界面跳转应由前端路由控制,后台仅返回json数据
+//        shiroFilter.setLoginUrl("/login");
+//        shiroFilter.setFilterChainDefinitionMap(filterMap);
+        LinkedHashMap<String, Filter> filtsMap = new LinkedHashMap<String, Filter>();
+        filtsMap.put("authc", new ShiroFormAuthenticationFilter());
+//        filtsMap.put("kickout", kickoutSessionControlFilter());
+        shiroFilter.setFilters(filtsMap);
+        shiroFilter.setFilterChainDefinitionMap(filterMap);
+
+        return shiroFilter;
+    }
+
+    @Bean
     public CookieRememberMeManager rememberMeManager() {
+        //System.out.println("ShiroConfiguration.rememberMeManager()");
         CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
-        cookieRememberMeManager.setCookie(simpleCookie());
+        cookieRememberMeManager.setCookie(rememberMeCookie());
         //rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)
         cookieRememberMeManager.setCipherKey(Base64.decode("2AvVhdsgUs0FSA3SDFAdag=="));
         return cookieRememberMeManager;
     }
 
-    @Bean("simpleCookie")
-    public SimpleCookie simpleCookie() {
-        SimpleCookie simpleCookie = new SimpleCookie();
-        simpleCookie.setName(NAME);
-        simpleCookie.setValue(VALUE);
+    @Bean
+    public SimpleCookie rememberMeCookie() {
+        //System.out.println("ShiroConfiguration.rememberMeCookie()");
+        //这个参数是cookie的名称,对应前端的checkbox的name = rememberMe
+        SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
+        //<!-- 记住我cookie生效时间30天 ,单位秒;-->
+        simpleCookie.setMaxAge(259200);
         return simpleCookie;
     }
 
+
+//    @Bean
+//    @DependsOn("lifecycleBeanPostProcessor")
+//    public DefaultAdvisorAutoProxyCreator  defaultAdvisorAutoProxyCreator() {
+//        DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
+//        defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
+//        return defaultAdvisorAutoProxyCreator;
+//    }
+
+
     /**
      * 配置shiro session 的一个管理器
      *
      * @return
      */
     @Bean(name = "sessionManager")
-    public SessionManager sessionManager(@Qualifier("redisSessionDAO") RedisSessionDAO redisSessionDAO, @Qualifier("simpleCookie") SimpleCookie simpleCookie) {
+    public SessionManager sessionManager() {
         DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
-        sessionManager.setSessionDAO(redisSessionDAO);
-        sessionManager.setSessionIdCookieEnabled(true);
-//        sessionManager.setSessionIdCookie(simpleCookie);
+        sessionManager.setSessionDAO(sessionDAO());
+        // 设置session过期时间
+        sessionManager.setGlobalSessionTimeout(-1000);
         return sessionManager;
     }
 
+    @Bean(name = "sessionDAO")
+    public SessionDAO sessionDAO() {
+        MemorySessionDAO sessionDAO = new MemorySessionDAO();
+//        RedisSessionDao sessionDAO = new RedisSessionDao();
+        return sessionDAO;
+    }
+
+
+    @Bean
+    public EhCacheManager getEhCacheManager() {
+        EhCacheManager em = new EhCacheManager();
+        //配置shiro缓存
+        em.setCacheManagerConfigFile("classpath:ehcache.xml");
+        return em;
+    }
+
+//    @Bean
+//    public SessionDAO sessionDAO() {
+//        EnterpriseCacheSessionDAO sessionDAO = new EnterpriseCacheSessionDAO();
+//        return sessionDAO;
+//    }
+
     /**
      * 注入踢人策略
      *
      * @return
      */
-    @Bean("kickoutSessionControlFilter")
-    public KickoutSessionControlFilter kickoutSessionControlFilter(
-            @Qualifier("sessionManager") SessionManager sessionManager,
-            @Qualifier("redisCacheManager") RedisCacheManager redisCacheManager,
-            @Qualifier("redisSessionDAO") RedisSessionDAO redisSessionDAO) {
+    @Bean
+    public KickoutSessionControlFilter kickoutSessionControlFilter() {
         KickoutSessionControlFilter kickout = new KickoutSessionControlFilter();
-        kickout.setCacheManager( redisCacheManager);
-        kickout.setSessionManager(sessionManager);
+        kickout.setCacheManager(getEhCacheManager());
+        kickout.setSessionManager(sessionManager());
         kickout.setKickoutAfter(true);
-        kickout.setSessionDAO(redisSessionDAO);
+        kickout.setSessionDAO(sessionDAO());
+        //同时在线智能一个人
+//        kickout.setKickoutUrl("/kickout");
         kickout.setMaxSession(1);
         return kickout;
     }
-    @Bean
-    public EhCacheManager getEhCacheManager() {
-        EhCacheManager em = new EhCacheManager();
-        //配置shiro缓存
-        em.setCacheManagerConfigFile("classpath:ehcache.xml");
-        return em;
-    }
-
 }

+ 41 - 19
pine-admin/src/main/java/com/pine/admin/modules/business/service/impl/CarOrderServiceImpl.java

@@ -6,6 +6,7 @@ import com.pine.admin.modules.business.dao.OfflinePaymentsDao;
 import com.pine.admin.modules.business.entity.CarOrder;
 import com.pine.admin.modules.business.entity.OfflinePayments;
 import com.pine.common.exception.ApiException;
+import com.pine.common.utils.Constant;
 import com.pine.common.utils.PostUtil;
 import com.pine.common.utils.RSAUtils;
 import io.swagger.annotations.Api;
@@ -186,6 +187,7 @@ public class CarOrderServiceImpl implements CarOrderService {
 
     public boolean offlineReview(Long id, String loanStatus, BigDecimal downPaymentRate) {
 
+
         log.info("offlineReview");
         try {
             Map<String, String> map = new HashMap<>();
@@ -216,24 +218,38 @@ public class CarOrderServiceImpl implements CarOrderService {
                 carOrder.setDownPaymentPrice(downPaymentPrice);
             }
             carOrder.setOfflineAuditTime(new Date());
-            int updates = carOrderDao.updateByPrimaryKeySelective(carOrder);
+//            int updates = carOrderDao.updateByPrimaryKeySelective(carOrder);
+
             //消息通知
             map.put("orderId", String.valueOf(id));
-            map.put("ratio", decimalFormat.format(downPaymentRate.multiply(new BigDecimal(100))));
+            //传过来地20直接传
+            map.put("ratio", decimalFormat.format(downPaymentRate));
 
-            PostUtil.httpPost("", map, "application/json");
 
+            String s = JSONObject.toJSONString(map);
 
-            if (updates > 0) {
+            String encrypt = RSAUtils.encrypt(RSAUtils.publicKey, s);
+
+            Map<String, String> data = new HashMap<>();
+
+            data.put("data", encrypt);
+
+
+            String offlineaudit = PostUtil.httpPost(Constant.offlineaudit, data, "application/json");
+
+            Map maps = (Map) JSON.parse(offlineaudit);
+
+
+            if (maps.get("code").equals("1")) {
                 return true;
+            } else {
+                return false;
             }
         } catch (Exception e) {
             log.error("offlineReview", e);
             throw new ApiException(e.getMessage());
 
         }
-
-        return false;
     }
 
     @Override
@@ -346,9 +362,9 @@ public class CarOrderServiceImpl implements CarOrderService {
 
             System.out.println(JSONObject.toJSONString(data));
 
-            String s1 = PostUtil.httpPost("http://test.lecshop.cn/admin/offlineaudit.htm", data, "application/json");
-            log.info(s1);
-            Map maps = (Map) JSON.parse(s1);
+            String refundinfo = PostUtil.httpPost(Constant.validatebacking, data, "application/json");
+            log.info(refundinfo);
+            Map maps = (Map) JSON.parse(refundinfo);
             return maps.get("code").toString();
 
         } catch (Exception e) {
@@ -369,17 +385,23 @@ public class CarOrderServiceImpl implements CarOrderService {
         }
         return carOrderLast;
     }
+//
+//    public static void main(String[] args) {
+//        Map<String, String> map = new HashMap<>();
+//
+//        map.put("account", "xszyx");
+//        map.put("password", "4QrcOUm6Wau+VuBX8g+IPg==");
+//
+//        String s = JSONObject.toJSONString(map);
+//
+//        String s2 = PostUtil.formUpload("http://47.100.17.208:8280/api/auth/sys-user/getShopRoleByAccountAndPassword", map, null, "");
+//        String s1 = PostUtil.httpPostFromData("http://47.100.17.208:8280/api/auth/sys-user/getShopRoleByAccountAndPassword", map);
+//        System.out.println(s2);
+//    }
 
     public static void main(String[] args) {
-        Map<String, String> map = new HashMap<>();
-
-        map.put("account", "xszyx");
-        map.put("password", "4QrcOUm6Wau+VuBX8g+IPg==");
-
-        String s = JSONObject.toJSONString(map);
-
-        String s2 = PostUtil.formUpload("http://47.100.17.208:8280/api/auth/sys-user/getShopRoleByAccountAndPassword", map, null, "");
-        String s1 = PostUtil.httpPostFromData("http://47.100.17.208:8280/api/auth/sys-user/getShopRoleByAccountAndPassword", map);
-        System.out.println(s2);
+        DecimalFormat decimalFormat = new DecimalFormat("0.##");
+        System.out.println(        decimalFormat.format(new BigDecimal(20))
+        );
     }
 }

+ 1 - 6
pine-admin/src/main/java/com/pine/admin/modules/youpaiyun/util/controller/YouPaiController.java → pine-admin/src/main/java/com/pine/admin/modules/youpaiyun/controller/YouPaiController.java

@@ -1,13 +1,10 @@
-package com.pine.admin.modules.youpaiyun.util.controller;
+package com.pine.admin.modules.youpaiyun.controller;
 
 import com.pine.admin.modules.youpaiyun.util.YunUploadUtils;
 import com.pine.common.dto.Result;
-import com.pine.common.utils.DateTimeTool;
-import com.pine.common.utils.ImageFileUtil;
 import io.swagger.annotations.Api;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -15,8 +12,6 @@ import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.Date;
 import java.util.Iterator;
 
 /**