Spring Cloud Bus Kafka + Config 刷新集群配置 - Spring Cloud

用Spring cloud config搭建了配置中心后,当修改配置后,可以通过直接发送post请求到[/actuator/refresh]进行刷新配置,无需重启服务新配置即可生效。 而当我们的服务部署了集群后,就需要对每个节点挨个发送请求进行刷新,影响维护效率,消息总线 Spring Cloud Bus 可以帮助解决这个问题。 前置条件: a. 启动Spring cloud eureka server: http://localhost:8888; b. 启动Spring cloud config server; c. 启动kafka,端口:9092。 1、首先创建springboot工程,pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache...
阅读全文

Spring Cloud Bus Kafka 发送和接受消息 - Spring Cloud

在微服务架构的系统中,我们通常会使用轻量级的消息代理来构建一个共用的消息主题让系统中所有微服务实例都连接上来,由于该主题中产生的消息会被所有实例监听和消费,所以我们称它为消息总线。在总线上的各个实例都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息, 例如配置信息的变更或者其他 一 些管理操作等。 由于消息总线在微服务架构系统中被广泛使用,所以它同配置中心一样,几乎是微服务架构中的必备组件。 Spring Cloud 作为微服务架构综合性的解决方案,对此自然也有自己的实现,这就是“Spring Cloud Bus”。 通过使用Spring Cloud Bus,可以非常容易地搭建起消息总线,同时实现了一些消息总线中的常用功能,比如,配合Spring Cloud Config 实现微服务应用配置信息的动态更新等。 目前Spring Cloud Bus提供了对RabbitMQ和Kafka的支持,下面以Kafka为例,介绍一下如何发送和接收消息(基于spring boot 2.0.4.RELEASE)。 1、首先创建springboot工程,并引入依赖: <dependency>...
阅读全文

Spring Cloud Security Oauth2 Client - Spring Cloud

利用Spring Cloud Security Oauth2如何对接第三方的认证和授权服务?以集成Github SSO为例: 1、注册github帐号并申请一个Oauth应用。 打开地址:https://github.com/settings/developers,点击按钮“Register a new application”,按要求填写信息即可。申请成功后会有“Client ID”和“Client Secret”。 注意:申请时填写的“Authorization callback URL”(http://localhost:8080/login)需要与security.oauth2.sso.loginPath(默认为: /login)对应。 2、添加spring-cloud-starter-oauth2依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId...
阅读全文

Spring Cloud Security 权限控制 - Spring Cloud

Spring Security 为基于Java EE的企业软件应用提供了全面的安全服务,而Spring cloud security可以极大的简化我们的配置,一个最简单的工程只需要在Spring boot工程中依赖spring-cloud-starter-security即可。 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency> 1、默认用户名为user,密码在启动日志中查找如下内容: Using default security password: 05be6203-6bfc-4f80-8b26-187af9c8e21d 2、如果要自定义用户名和密码,只需修改配置文件application.yml security: user: name: admin password: 12345...
阅读全文

Spring Cloud Hystrix Dashboard - Spring Cloud

“Spring Cloud Hystrix 断路器” Hystrix可以收集每个断路器(以HystrixCommand注解的)的运行状态, 由 Hystrix Dashboard 以界面化的方式进行展示。 1、需要的依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframewo...
阅读全文

Spring Cloud Feign对Hystrix断路器的配置 - Spring Cloud

前面分别讲过了 “Spring Cloud Feign 声明式REST客户端” 和 “Spring Cloud Hystrix 断路器”,其实在Feign中已经集成了对Hystrix的配置。 基于之前的Feign工程,做如下改造: application.yml添加配置: feign: hystrix: enabled: true 修改Feign client import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @FeignClient(value = "${provider.hostname}", fallback = HelloClient.HelloClie...
阅读全文

Spring Cloud Hystrix 断路器 - Spring Cloud

Hystrix是一个断路器(circuit breaker)。在微服务体系中,通常会有多层的链式的服务调用,如果在调用链中某个环节故障,会导致该请求阻塞,进而导致调用链级联故障,最终影响整个微服务体系的使用,即“雪崩效应”。为了解决这个问题,Netflix推出了Hystrix,当请求某个服务发生故障的频率达到一个阈值时(Hystrix默认是5秒钟内20次故障),会自动断路并返回自定义的静态数据。 如何使用Spring Cloud Hystrix? 在pom.xml加入spring-cloud-starter-hystrix依赖。 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> 修改启动类,加上注解@EnableCircuitBreaker。 import com.netflix.hystrix.con...
阅读全文

Spring Cloud Zuul:服务网关之路由服务 - Spring Cloud

路由是微服务架构中不可或缺的一部分。Zuul是由Netflix开源的,提供了基于JVM的路由服务和服务端侧负载均衡服务。(官方文档:https://cloud.spring.io/spring-cloud-static/Edgware.RELEASE/single/spring-cloud.html#_router_and_filter_zuul) 1. 如何使用Spring Cloud Zuul? 1.1 pom.xml加入spring-cloud-starter-zuul依赖。 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> 1.2 application.yml加入zuul配置 假设现在已有一个用户服务:http://localhost:8081/user/list。 zuul: routes: user...
阅读全文

Spring Cloud Feign 声明式REST客户端 - Spring Cloud

Feign是一个声明式Web服务客户端,使得调用Rest服务更简单。使用Feign只需要写一个接口加上一些注解就可以。下面主要介绍如何和Eureka一起使用。 1、假设我们已经启动了Eureka server(http://localhost:8671) 和 服务提供者(提供了Rest服务:http://localhost:8888/hello/{name}),并且服务提供者已经在Eureka server上注册。 2、新建spring boot工程,加入Feign和Eureka客户端依赖。 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> ...
阅读全文

Spring Cloud Ribbon 客户端侧负载均衡器 - Spring Cloud

Ribbon是一个客户端侧负载均衡器(Client Side Load Balancer)。每个Ribbon客户端都会从服务注册中心(Eureka)获取服务清单并缓存在客户端,同时通过心跳机制去维护服务清单,然后执行负载均衡策略去调用不同服务器上的服务,谓之客户端侧负载均衡,因为这个负载均衡是发生在客户端侧的,而服务端侧负载均衡,例如Nginx,负载均衡是发生在服务端的,客户端发起请求,Nginx负责维护服务清单,并执行负载均衡策略。 Ribbon用Eureka作为注册中心,ribbon需要作为Eureka client注册在Eureka server上。 添加Ribbon和Eureka客户端依赖。 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId...
阅读全文

Spring Cloud Eureka Server 高可用集群配置 - Spring Cloud

Eureka server是没有后端存储的,注册表中的服务实例通过发送心跳包来保持更新(因此可以在内存中完成)。 1、独立模式的配置(application.yml) server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ 2、集群部署模式(application.yml) 如果要做集群部署,只需要定义不同的配置文件,通过运行不同配置文件的实例,让各个server之间互相注册。 --- server: port: 8761 spring: profiles: peer1 eureka: instance: hostname: localhost client: ...
阅读全文

Spring Cloud Config/Eureka 构建分布式配置中心 - Spring Cloud

前文提到了“Spring cloud config”和“Eureka”的使用。此时只需要针对config server和config client做一些改造,通过Eureka来实现集群服务。 1、改造Config Server,将其注册在Eureka server上。pom.xml加入依赖eureka client依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> 修改application.yml,设置应用名并指定注册中心。 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ spring: application: name: config-server 在Spring boot启...
阅读全文

Spring Cloud Eureka 入门 - Spring Cloud

Eureka 是一个提供服务注册与发现的组件(官方文档地址: https://springcloud.cc/spring-cloud-dalston.html#spring-cloud-eureka-server)。 1、Eureka server 提供服务注册与发现服务 创建Spring boot web应用,pom.xml添加Eureka server依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </depend...
阅读全文

Spring Cloud Config 入门 - Spring Cloud

什么是Spring cloud config? 官方文档地址: http://projects.spring.io/spring-cloud/spring-cloud.html#_spring_cloud_config 1、Spring cloud config repo 创建git仓库,用于集中存放配置文件,地址为:https://github.com/spring-cloud-samples/config-repo.git 创建配置文件:foo-development.properties,内容为: bar: config foo: from foo development 2、Spring cloud config server 创建一个Spring boot应用,pom.xml添加依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId>...
阅读全文

如何创建Core - Apache Solr

Apache Solr 版本:6.1.0。 1、按上一篇:“Apache Solr 6.1.0 在 Tomcat 中部署运行”,先让Solr运行起来。 2、在“solr_home”下新建文件夹“new_core”,将“solr-6.1.0/example/example-DIH/solr/solr”下的所有文件复制到该文件夹中,重启Tomcat,稍等一会儿,Solr会自动扫描到该Core,名称为“new_core”。 3、注释掉下面代码: <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" /> <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" /&...
阅读全文

Apache Solr 6.1.0 在 Tomcat 中部署运行 - Apache Solr

1、Apache Solr官方下载地址:http://www.apache.org/dyn/closer.lua/lucene/solr/6.1.0。当前最新版本为:6.1.0。 2、Apache Solr 6.1.0环境要求:JDK8及以上。 3、Apache Solr 6.1.0已内置jetty,可以通过运行命令:bin/solr start -e cloud -noprompt,直接启动Solr,默认访问端口:8983,具体过程可以参考Solr官方文档:http://lucene.apache.org/solr/quickstart.html。此文主要讲解如何将Solr部署在Tomcat中运行。 4、解压下载的Solr压缩包,将“solr-6.1.0/server/solr-webapp/webapp”复制到Tomcat下的webapps目录下,并重命名为“solr”。 5、将“solr-6.1.0/server/lib/ext”下的所有文件复制到“solr/WEB-INF/lib”下,再将“solr-6.1.0/dist”下的solr-dataimp...
阅读全文

Spring Task 定时任务的注解实现

1、引入相关jar包。 2、在Spring配置文件中加入“”,并配置扫描路径。 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd htt...
阅读全文

Mybatis和Spring的整合(注解)

1、添加“mybatis”和“mybatis-spring”的依赖。 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> 2、添加Mybatis的配置文件:mybatis-config.xml。 更多配置请参考Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/configurat...
阅读全文

如何检查敏感词(DFA算法)

DFA:Deterministic Finite Automaton,确定有穷自动机。什么是确定有穷自动机?请自行搜索。 假设我们我们需要检查的敏感词List为: [中国, 日本, 日本人, 日本女人] 首先我们需要把他转换成下面形式的Map: { 日={ isEnd=false, 本={ 女={ isEnd=false, 人={ isEnd=true } }, isEnd=true, 人={ isEnd=true } } }, 中={ isEnd=false, 国={ isEnd=true } } } 其中“isEnd”标记该字符是否为最后一个字符。 接下来就是检索这个Map集合,来检查是否包含敏感词。 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import ...
阅读全文

Jedis如何快速批量插入大量数据

Jedis可以通过“redis.clients.jedis.Pipeline”来高效的批量插入大量数据,直接上代码: import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; public class TestRedis { private static final String REDIS_IP = "127.0.0.1"; private static Jedis jedis = new Jedis(REDIS_IP); private static Pipeline pipeline = jedis.pipelined(); private static int count = 10000; /** * 循环插入数据 */ public static void singleHset() { for(int i=0; i<count; i++) { jedis.hset("sequence_...
阅读全文

如何将科学记数法形式转换成普通数字形式显示

Java中,数字小数点位数太多,或者数字太大,会显示成科学记数法的形式,比如: System.out.println("0.00000000001d >> " + 0.00000000001d); System.out.println("0.00000000001f >> " + 0.00000000001f); System.out.println("0.00000000001 >> " + 0.00000000001); System.out.println("1000000000d >> " + 1000000000d); System.out.println("1000000000f >> " + 1000000000f); System.out.println("1000000000 >> " + 1000000000); 运行结果为: 0.00000000001d >> 1.0E-11 0.00000000001f >> 1.0E-11 0.00000000001 >> 1.0E...
阅读全文

基于Redis的CAS服务端集群

为了保证生产环境CAS(Central Authentication Service)认证服务的高可用,防止出现单点故障,我们需要对CAS Server进行集群部署。 CAS的Ticket默认是以Map的方式存储在JVM内存中的,多个tomcat之间无法共享,因此我们可以使用MemCached或者Redis来存储Ticket。MemCached的方式官方已经提供了解决方案,我们这里使用的是Redis,具体实现可以参考CAS的模块:cas-server-integration-memcached。 1、pom.xml文件中加入依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.2</version> </dependency> <dependency> <groupId>org.springframework.data</gr...
阅读全文

Java BigDecimal 处理高精度计算

Java的Double和Float类型在做运算的时候会出现丢失精度问题,比如: System.out.println(4.8D+3); //7.8 System.out.println(4.8D-3); //1.7999999999999998 System.out.println(4.8D*3); //14.399999999999999 System.out.println(4.8D/3); //1.5999999999999999 System.out.println(4.8F>4.8D); //true 此时我们可以使用“java.math.BigDecimal”来进行运算: System.out.println(new BigDecimal(String.valueOf(4.8D)).add(new BigDecimal(3))); //7.8 System.out.println(new BigDecimal(String.valueOf(4.8D)).subtract(new BigDecimal(3))); //1.8 System.out.println(new BigDe...
阅读全文

CAS+Shiro实现单点退出

CAS+Shiro实现了统一认证,但是在做登出操作的时候子系统并没有退出,依然可以访问。解决方案: 1. 修改业务系统,即cas客户端 1.1、配置“web.xml”,在其他filter之前添加: <!-- 单点退出 begin --> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <filter> <filter-name>singleSignOutFilter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>s...
阅读全文

CAS单点登录密码加盐的认证

为了安全,我们会对系统中的密码进行特殊方法加密,比如加入密码盐,并用MD5迭代N次,这个时候我们就需要在CAS服务端自定义认证处理类。 1、在CAS服务端新建类”MyAuthenticationHandler”,继承自”AbstractJdbcUsernamePasswordAuthenticationHandler”。 package com.***.authentication.handler; import org.apache.shiro.crypto.hash.Md5Hash; import org.jasig.cas.adaptors.jdbc.AbstractJdbcUsernamePasswordAuthenticationHandler; import org.jasig.cas.authentication.HandlerResult; import org.jasig.cas.authentication.PreventedException; import org.jasig.cas.authentication.UsernamePasswordCredential; im...
阅读全文

CAS单点登录与Shiro的集成

1、CAS 与 Shiro 集成不需要修改”web.xml”文件,也不用依赖”cas-client-core”(参考:“CAS单点登录初使用”),只需要依赖”shiro-cas” 就可以了,因为”shiro-cas”已经依赖了”cas-client-core”。 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-cas</artifactId> <version>1.2.4</version> </dependency> 2、然后修改shiro的配置文件,shiro.xml。 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta...
阅读全文

CAS单点登录初使用

CAS(Central Authentication Service),中央认证服务,一种独立开始指令协议,旨在为 Web 应用系统提供一种可靠的单点登录方法。 一、服务端配置。 1、下载、解压并导入到你自己的开发工具中。 目前CAS最新版本为 4.1.5,下载地址:https://github.com/Jasig/cas/archive/v4.1.5.zip 2、CAS推荐的是以HTTPS协议进行统一认证,为了方便,我们只使用HTTP协议实现,需要修改一点代码以支持使用HTTP协议进行认证: 1) 修改”cas-server-webapp”模块的”WEB-INF\deployerConfigContext.xml”文件。 <bean id="proxyAuthenticationHandler" class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="suppor...
阅读全文

C3P0连接池超时连接失效

使用C3P0做数据库连接池,每天早上第一次打开应用的时候会报数据库链接错误,是因为MYSQL的默认“wait_timeout”为8个小时,如果一个连接空闲时间超过8小时Mysql就会自动断开该连接,而连接池却认为该连接是有效的,因此请求报错。异常中也给出了明确的提示和解决方法: Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 63,210,211 milliseconds ago. The last packet sent successfully to the server was 63,210,212 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validit...
阅读全文

设计模式之——策略模式(Head first设计模式学习笔记)

1、 策略模式的定义: 策略模式定义了算法簇,分别分装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 2、 设计原则: 1) 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起; 2) 针对接口编程,而不是针对实现编程; 3) 多用组合,少用继承; 3、 实现: 假设我们现在有两个角色,骑士和巨魔,骑士使用弓箭做武器,巨魔使用斧头当武器,那么我们如何进行设计呢? 1) 首先我们应该有个武器行为的接口:WeaponBehavior,它有一个use()方法来使用武器。 package designpatterns.strategypattern.behavior; /** * 武器行为策略接口 */ public interface WeaponBehavior { void use(); } 2) 这个接口有两个实现类,分别是弓箭(BowAndArrowBehavior)和斧头(AxeBehavior)。 package designpatterns.strategypattern.behavior; /** ...
阅读全文

使用 Hibernate 的 PostInsertEventListener, PostUpdateEventListener, PostDeleteEventListener 做日志管理

Hibernate 为我们提供了事件监听机制,我们只需要实现相应的监听器,就可以追踪到对象的修改,比如 PostInsertEventListener, PostUpdateEventListener, PostDeleteEventListener、PostLoadEventListener等等,都在 org.hibernate.event.spi 包中。 1、实现 PostInsertEventListener, PostUpdateEventListener, PostDeleteEventListener package com.***.listener; import com.***.entity.LogEntity; import com.***.enums.LogType; import com.***.manager.LogManager; import com.***.utils.SysUserUtil; import com.***.UserDto; import org.hibernate.event.spi.*; import org.hibernate.persister...
阅读全文

DateConverter does not support default String to 'Date' conversion

先贴上错误信息: 严重: Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is org.apache.commons.beanutils.ConversionException: DateConverter does not support default String to 'Date' conversion.] with root cause org.apache.commons.beanutils.ConversionException: DateConverter does not support default String to 'Date' conversion. at org.apache.commons.beanutils.converters.DateTimeConverter.toDate(DateTimeConverter.java:474) at org.apache...
阅读全文

如何在Spring启动后执行一些操作

某些时候,我们在项目启动后就需要执行一些操作,这个时候我们就可以通过实现ApplicationListener接口,实现他的onApplicationEvent方法来做到。 但是直接做的话会有个问题,就是在spring启动后onApplicationEvent方法会被执行两次。 这是因为此时存在两个ApplicationContext: 一个是Root WebApplicationContext; 另一个是SpringMVC的ApplicationContext,叫做:WebApplicationContext for namespace ‘dispatcher-servlet’(dispatcher-servlet为你的springmvc的配置文件名),它是Root WebApplicationContext的子容器。 解决办法就是判断当前WebApplicationContext是否有父容器。 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context....
阅读全文

一个Dubbo的小例子

下面是一个Dubbo实现RPC服务的小例子,包含了服务提供者(Provider)和服务消费者(Consumer)部分,服务注册于Zookeeper上。 1、服务提供者(Provider)部分 1) pom文件中添加zookeeper和dubbo的依赖,提供者和消费者都需要加上。 <!-- Zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.5.0-alpha</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.5</versi...
阅读全文

Apache Shiro 动态授权

shiro的权限控制可以配置在shiroFilter的filterChainDefinitions中: <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <!-- 此处省略其他配置信息 --> <property name="filterChainDefinitions"> <value> /login.jsp = authc /logout = logout /**.* = anon /user/add = perms[user:add] /** = authc </value> </property> </bean> 但是一般我们的系统中的权限都是动态的,角色和权限信息都存储于数据库中,此时就需要我们去继承Permission...
阅读全文

Apache Shiro 自定义 Realm 实现登录及授权

在上一篇文章讲了Shiro自带的JdbcRealm实现的登录和授权,但是这种方式不能在principal中传入对象,所以我们可能需要自定义Realm的实现。 1、自定义MyRealm继承AuthorizingRealm import com.***.User; import com.***.userService; import com.***.roleService; import com.***.resourceService; import org.apache.shiro.authc.*; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.util.ByteSource; import or...
阅读全文

Apache Shiro JdbcRealm 实现登录及授权

以下是使用shiro自身的JdbcRealm实现的登录及授权功能: 1、pom文件中添加依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> </dependency> <dependency> <groupId>org.apache....
阅读全文

JDK的安装和Java环境变量的配置(CentOS和windows)

以下是分别在Windows和CentOS系统下JDK的安装过程及环境变量的配置过程: 1、从oracle下载JDK并安装,windows下直接点击安装即可,CentOS下用yum或rpm安装,具体过程略过。 2、Windows下Java环境变量的配置 1) 右击“计算机” -> “属性” -> “高级系统设置” -> “高级” -> “环境变量”; 2) 新建系统变量“JAVA_HOME”,值为:jdk的安装路径,比如“D:\Java\jdk1.6.0_26”; 3) 新建系统变量“CLASS_PATH”,值为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(tools.jar和dt.jar的路径); 4) 修改系统变量“Path”,值为:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin(bin和jre\bin的路径); 5) “javac”,显示javac命令用法等信息,表示java环境变量配置成功。 3、CentOS下Java环境变量的配置 vi /etc/profile 加入如...
阅读全文

基于ZooKeeper的Dubbo注册中心安装(CentOS)

DUBBO是一个分布式服务框架,用于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架。Dubbo架构的节点包含Provider、Consumer、Registry、Monitor、Container,其中Registry(注册中心)可以使用Zookeeper注册中心、Redis注册中心等来进行服务注册。下面是Zookeeper及Dubbo-admin的安装过程: 1、安装jdk并配置java环境变量 2、安装Zookeeper (1) 下载Zookeeper wget http://www.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz (2) 解压 tar zxvf zookeeper-3.4.6.tar.gz (3) 复制 conf/zoo_sample.cfg 为 conf/zoo.cfg cd zookeeper-3.4.6/conf cp zoo_sample.cfg zoo.cfg (4) 对zoo.cfg文件做相应修改 tickTime:每次心跳的毫秒数...
阅读全文

Jedis 如何缓存对象及对象的List

Jedis 目前并没有提供对Java对象的缓存和读取方法,但是它为我们提供了这个方法: jedis.set(byte[] key, byte[] value); 我们可以使用这个方法来间接的实现对对象的缓存。原理就是在缓存对象之前,先将该对象序列化为 byte 数组,而取出缓存后再反序列化为对象。 1、序列化工具抽象类 import java.io.*; /** * 序列化工具抽象类 */ public abstract class SerializationUtil { /** * 序列化方法 * @param object * @return */ public abstract byte[] serialize(Object object); /** * 反序列化方法 * @param bytes * @return */ public abstract Object deserialize(byte[] bytes); /** * 关闭流 ...
阅读全文