发新帖

Shiro,CasServer,SpringMvc,Springboot,Mysql,Swagger2整合,服务化平台搭建

zhujun 6月前 184

CasServer配置:
1.将CasServcer对应的源码建立工程,修改数据库配置:
cas-web\src\main\webapp\WEB-INF\deployerConfigContext.xml

        <bean  id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property  name="driverClassName"  value="com.mysql.jdbc.Driver"></property>
                <property  name="url"
                                    value="jdbc:mysql://******:3306/basic_sys?useUnicode=true&amp;characterEncoding=utf8"></property>
                <property  name="username"  value="**"></property>
                <property  name="password"  value="**"></property>
        </bean>

添加mysql的jar

2.Shiro相关配置:
shiro.loginUrl=http://app.ranko.cn:9090/osp-cas/login?service=http://localhost:8080/osp-runtime/shiro-cas
shiro.logoutUrl=http://app.ranko.cn:9090/osp-cas/logout?service=http://localhost:8080/osp-runtime/shiro-cas
shiro.cas.serverUrlPrefix=http://app.ranko.cn:9090/osp-cas
shiro.cas.service=http://localhost:8080/osp-runtime/shiro-cas
shiro.failureUrl=http://localhost:8080/osp-runtime/home/loginFailure.action
shiro.successUrl=http://localhost:8080/osp-runtime/home/loginSuccess.action

shiro对应的spring配置相关:
        <bean  id="casRealm"  class="cn.ranko.flashpoint.realm.UserRealm">
                <property  name="cachingEnabled"  value="true"/>
                <property  name="authenticationCachingEnabled"  value="true"/>
                <property  name="authenticationCacheName"  value="authenticationCache"/>
                <property  name="authorizationCachingEnabled"  value="true"/>
                <property  name="authorizationCacheName"  value="authorizationCache"/>
                <!--  cas服务端地址前缀  -->
                <property  name="casServerUrlPrefix"  value="${shiro.cas.serverUrlPrefix}"  />
                <!--  应用服务地址,用来接收cas服务端票据  -->
                <property  name="casService"  value="${shiro.cas.service}"  />
        </bean>

        <bean  id="casSubjectFactory"  class="org.apache.shiro.cas.CasSubjectFactory"></bean>

        <!--  安全管理器  -->
        <bean  id="securityManager"  class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
                <property  name="subjectFactory"  ref="casSubjectFactory"></property>
                <property  name="realm"  ref="casRealm"  />
        </bean>


        <!--  相当于调用SecurityUtils.setSecurityManager(securityManager)  -->
        <bean  class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
                <property  name="staticMethod"  value="org.apache.shiro.SecurityUtils.setSecurityManager"/>
                <property  name="arguments"  ref="securityManager"/>
        </bean>

        <!--  会话验证调度器  -->
        <bean  id="sessionValidationScheduler"  class="org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler">
                <property  name="sessionValidationInterval"  value="1800000"/>
                <property  name="sessionManager"  ref="sessionManager"/>
        </bean>


        <!--  会话管理器  -->
        <bean  id="sessionManager"  class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
                <property  name="globalSessionTimeout"  value="1800000"/>
                <property  name="deleteInvalidSessions"  value="true"/>
                <property  name="sessionValidationSchedulerEnabled"  value="true"/>
                <property  name="sessionValidationScheduler"  ref="sessionValidationScheduler"/>
                <property  name="sessionIdCookieEnabled"  value="true"/>
                <property  name="sessionIdCookie"  ref="sessionIdCookie"/>
        </bean>


        <!--  Shiro的Web过滤器  -->
        <bean  id="shiroFilter"  class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
                <property  name="securityManager"  ref="securityManager"/>
                <property  name="loginUrl"  value="${shiro.loginUrl}"/>
                <property  name="filters">
                        <util:map>
                                <entry  key="casFilter"  value-ref="casFilter"  />
                        </util:map>
                </property>
                <property  name="filterChainDefinitions">
                        <value>
                                /shiro-cas  =  casFilter
                                /login.html  =  anon
                                /loginFailure.html  =  anon
                                /assets/**  =  anon
                                /logout  =  logoutFilter
                                /**  =  user,authc
                        </value>
                </property>
        </bean>

        <bean  id="casFilter"  class="org.apache.shiro.cas.CasFilter">
                <!--  配置验证错误时的失败页面  -->
                <property  name="failureUrl"  value="${shiro.failureUrl}"  />
                <property  name="successUrl"  value="${shiro.successUrl}"  />
        </bean>

        <bean  id="logoutFilter"  class="org.apache.shiro.web.filter.authc.LogoutFilter">
                <!--  配置验证错误时的失败页面  -->
                <property  name="redirectUrl"  value="${shiro.logoutUrl}"  />
        </bean>

        <bean  id="lifecycleBeanPostProcessor"  class="org.apache.shiro.spring.LifecycleBeanPostProcessor"></bean>

        <!--  会话Cookie模板  -->
        <bean  id="sessionIdCookie"  class="org.apache.shiro.web.servlet.SimpleCookie">
                <constructor-arg  value="sid"/>
                <property  name="httpOnly"  value="true"/>
                <property  name="maxAge"  value="-1"/>
        </bean>

        <bean  id="lifecycleBeanPostProcessor"  class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
        <bean  class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
                    depends-on="lifecycleBeanPostProcessor">
                <property  name="proxyTargetClass"  value="true"/>
        </bean>

SpringMvc相关配置和MYBATIS配置就不赘述了。

服务化Springboot配置:
#  Server  settings
server:
        port:  9000
#        address:  localhost

#  DATASOURCE
jdbc:
        dataSourceClassName:  com.mysql.jdbc.jdbc2.optional.MysqlDataSource
        url:  jdbc:mysql://**/dev_basic_sys?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8
        databaseName:  test
        serverName:  **
        username:  **
        password:  **
        cachePrepStmts:  true
        prepStmtsSize:  250
        prepStmtsCacheSqlLimit:  2048
        userServerPrepStmts:  true

#  SPRING  PROFILES
spring:
        #  HTTP  ENCODING
        http:
                encoding.charset:  UTF-8
                encoding.enable:  true
                encoding.force:  true

#  MyBatis
mybatis:
        typeAliasesPackage:  cn.ranko.flashpoint.model
        basePackage:  cn.ranko.flashpoint.mapper
        mapperLocations:  classpath:/cn/ranko/flashpoint/mapper/*.xml
        configLocation:  classpath:/mybatis-config.xml

#  LOGGING
logging:
        level:
              org.apache.ibatis:  DEBUG
              java.sql.Statement:  DEBUG
              java.sql.PreparedStatement:  debug
              java.sql.ResultSet:  debug


security:
    basic:
        enabled:  false

Springboot数据库配置:
package  cn.ranko.flashpoint.config;

/**
  *  Created  by  zhujun  on  2017/1/31.
  */
import  java.util.Arrays;
import  javax.sql.DataSource;
import  org.slf4j.Logger;
import  org.slf4j.LoggerFactory;
import  org.springframework.boot.bind.RelaxedPropertyResolver;
import  org.springframework.context.ApplicationContextException;
import  org.springframework.context.EnvironmentAware;
import  org.springframework.context.annotation.Bean;
import  org.springframework.context.annotation.Configuration;
import  org.springframework.core.env.Environment;
import  org.springframework.transaction.annotation.EnableTransactionManagement;

import  com.zaxxer.hikari.HikariConfig;
import  com.zaxxer.hikari.HikariDataSource;

@Configuration
@EnableTransactionManagement
public  class  DataBaseConfig  implements  EnvironmentAware  {

        private  RelaxedPropertyResolver  propertyResolver;

        private  static  Logger  log  =  LoggerFactory
                        .getLogger(DataBaseConfig.class);

        private  Environment  env;

        public  void  setEnvironment(Environment  env)  {
                this.env  =  env;
                this.propertyResolver  =  new  RelaxedPropertyResolver(env,  "jdbc.");
        }

        @Bean(destroyMethod  =  "shutdown")
        public  DataSource  dataSource()  {
                log.debug("Configruing  DataSource");
                if  (propertyResolver.getProperty("url")  ==  null
                                &&  propertyResolver.getProperty("databaseName")  ==  null)  {
                        log.error("Your  database  conncetion  pool  configuration  is  incorrct  !  The  application  "
                                        +  "cannot  start  .  Please  check  your  jdbc");
                        Arrays.toString(env.getActiveProfiles());
                        throw  new  ApplicationContextException(
                                        "DataBase  connection  pool  is  not  configured  correctly");
                }
                HikariConfig  config  =  new  HikariConfig();
                config.setDataSourceClassName(propertyResolver
                                .getProperty("dataSourceClassName"));
                if  (propertyResolver.getProperty("url")  ==  null
                                ||  "".equals(propertyResolver.getProperty("url")))  {
                        config.addDataSourceProperty("databaseName",
                                        propertyResolver.getProperty("databaseName"));
                        config.addDataSourceProperty("serverName",
                                        propertyResolver.getProperty("serverName"));
                }  else  {
                        config.addDataSourceProperty("url",
                                        propertyResolver.getProperty("url"));
                }
                config.setUsername(propertyResolver.getProperty("username"));
                config.setPassword(propertyResolver.getProperty("password"));
                if  ("com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
                                .equals(propertyResolver.getProperty("dataSourceName")))  {
                        config.addDataSourceProperty("cachePrepStmts",
                                        propertyResolver.getProperty("cachePrepStmts"));
                        config.addDataSourceProperty("prepStmtCacheSize",
                                        propertyResolver.getProperty("prepStmtsCacheSize"));
                        config.addDataSourceProperty("prepStmtCacheSqlLimit",
                                        propertyResolver.getProperty("prepStmtCacheSqlLimit"));
                        config.addDataSourceProperty("userServerPrepStmts",
                                        propertyResolver.getProperty("userServerPrepStmts"));
                }
                return  new  HikariDataSource(config);
        }

}

Springboot中Mybatis的配置:
package  cn.ranko.flashpoint.config;

import  javax.inject.Inject;
import  javax.persistence.EntityManager;
import  javax.sql.DataSource;
import  org.apache.commons.logging.Log;
import  org.apache.commons.logging.LogFactory;
import  org.apache.ibatis.session.SqlSessionFactory;
import  org.mybatis.spring.SqlSessionFactoryBean;
import  org.mybatis.spring.annotation.MapperScan;
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.boot.autoconfigure.AutoConfigureAfter;
import  org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import  org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import  org.springframework.boot.bind.RelaxedPropertyResolver;
import  org.springframework.context.EnvironmentAware;
import  org.springframework.context.annotation.Bean;
import  org.springframework.context.annotation.Configuration;
import  org.springframework.core.env.Environment;
import  org.springframework.core.io.DefaultResourceLoader;
import  org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import  org.springframework.jdbc.datasource.DataSourceTransactionManager;
import  org.springframework.transaction.annotation.EnableTransactionManagement;
/**
  *  Created  by  zhujun  on  2017/1/31.
  */
@Configuration
@AutoConfigureAfter({  DataBaseConfig.class  })
public  class  MybatisConfig  implements  EnvironmentAware  {

        private  static  Log  logger  =  LogFactory.getLog(MybatisConfig.class);

        private  RelaxedPropertyResolver  propertyResolver;

        @Autowired
        private  DataSource  dataSource;

        public  void  setEnvironment(Environment  environment)  {
                this.propertyResolver  =  new  RelaxedPropertyResolver(environment,
                                "mybatis.");
        }

        @Bean(name  =  "sqlSessionFactory")
        public  SqlSessionFactory  sqlSessionFactory()  {
                try  {
                        SqlSessionFactoryBean  sessionFactory  =  new  SqlSessionFactoryBean();
                        sessionFactory.setDataSource(dataSource);
                        return  sessionFactory.getObject();
                }  catch  (Exception  e)  {
                        logger.warn("Could  not  confiure  mybatis  session  factory");
                        return  null;
                }
        }

}

package  cn.ranko.flashpoint.config;

import  org.mybatis.spring.mapper.MapperScannerConfigurer;
import  org.springframework.boot.autoconfigure.AutoConfigureAfter;
import  org.springframework.boot.bind.RelaxedPropertyResolver;
import  org.springframework.context.EnvironmentAware;
import  org.springframework.context.annotation.Bean;
import  org.springframework.context.annotation.Configuration;
import  org.springframework.core.env.Environment;


/**
  *  Created  by  zhujun  on  2017/1/31.
  */
@Configuration
//  因为这个对象的扫描,需要在MyBatisConfig的后面注入,所以加上下面的注解
@AutoConfigureAfter(MybatisConfig.class)
public  class  MyBatisMapperScannerConfig  implements  EnvironmentAware  {

        private  RelaxedPropertyResolver  propertyResolver;

        public  void  setEnvironment(Environment  environment)  {
                this.propertyResolver  =  new  RelaxedPropertyResolver(environment,
                                "mybatis.");
        }

        @Bean
        public  MapperScannerConfigurer  mapperScannerConfigurer()  {
                MapperScannerConfigurer  mapperScannerConfigurer  =  new  MapperScannerConfigurer();
                //获取之前注入的beanName为sqlSessionFactory的对象
                mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
                //指定xml配置文件的路径
                mapperScannerConfigurer.setBasePackage(propertyResolver
                                .getProperty("basePackage"));
                return  mapperScannerConfigurer;
        }

}

Springboot整合Swagger2整合:
package  cn.ranko.flashpoint.config;

import  io.swagger.annotations.ApiOperation;
import  org.springframework.context.annotation.Bean;
import  org.springframework.context.annotation.Configuration;
import  org.springframework.web.bind.annotation.RequestMethod;
import  org.springframework.web.context.request.async.DeferredResult;
import  springfox.documentation.builders.ApiInfoBuilder;
import  springfox.documentation.builders.PathSelectors;
import  springfox.documentation.builders.RequestHandlerSelectors;
import  springfox.documentation.service.ApiInfo;
import  springfox.documentation.spi.DocumentationType;
import  springfox.documentation.spring.web.plugins.Docket;
import  springfox.documentation.swagger2.annotations.EnableSwagger2;


/**
  *  Created  by  MacheNike  on  2017/1/31.
  */
@Configuration
@EnableSwagger2
public  class  SwaggerConfig  {

        @Bean
        public  Docket  createRestApi()  {
                return  new  Docket(DocumentationType.SWAGGER_2)
                                .apiInfo(apiInfo())
                                .select()
                                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                                .paths(PathSelectors.any())
                                .build();
        }



        private  ApiInfo  apiInfo()  {
                return  new  ApiInfoBuilder()
                                .title("核心配置管理  -  RANKO.CN")
                                .description("核心配置管理,主要用于RKOSP平台的基础管理配置")
                                .contact("RANKO.CN")
                                .license("无锡蓝科创想科技有限公司")
                                .licenseUrl("ranko.cn")
                                .build();
        }

}



最新回复 (0)
返回
发新帖
zhujun
主题数
24
帖子数
2
注册排名
1