database

FastDFS 防盗图开启

Jan 18, 2017 | | Say something

在上一讲中介绍了FastDFS和nginx的集成。本将介绍FastDFS 防盗图开启 修改/etc/fdfs/http.conf #开启token校验 http.anti_steal.check_token=true #设置校验失败后显示的警告图片 http.anti_steal.token_check_fail=/etc/fdfs/anti-steal.jpg java客户端带有一个工具方法来产生token. 用法如下:

//输出为:ts:1484735390, token:ada4c7f1a65e125e3a55a837d0bff1eb 那么请求的url为 192.168.14.153/M00/01/74/wKgOmVh_dH6AE-f3AAA2_mDXnps704.jpg?ts=1484735390&token=ada4c7f1a65e125e3a55a837d0bff1eb 注意:由于是时间戳比较,确保nginx服务器的时区和时间配置正确。

mysql实现分组排序[转]

Nov 21, 2016 | | Say something

MySQL-to achieve ORACLE-ROW_NUMBER () over (partition by) packet sorting capabilities. Not provide a similar MYSQL ORACLE in OVER () such a wealth of analysis functions. Need to implement such a function in MySQL, we can only use some flexible approach: First of all, we create instance data: drop table if exists heyf_t10; create table heyf_t10 […more]

mycat初体验

Nov 2, 2016 | | Say something

三台虚拟机的IP如下 MySQL1:192.168.14.145 MySQL2:192.168.14.146 MyCat: 192.168.14.147 MySQL的安装过程不在本文的讨论范围,略过本文由javacoder.cn整理,转载请注明出处。 注意:由于我配置MyCat使用native驱动,所以MyCat服务器需要先安装MySQL客户端,由于我使用的centos7,所以直接执行”yum install mysql”安装。 修改MyCat_HOME/conf/server.xml

配置root用户的用户名和密码,以及默认的数据库 修改MyCat_HOME/conf/rule.xml

取模的节点数为2,因为我只有两台测试MySQL服务器 修改MyCat_HOME/conf/schema.xml

配置了一个名为test_db的数据库,声明了t_user表的负载均衡策略为mod-long,对id进行取模操作。由于驱动使用的是native,所以需要事先在MyCat对应的服务器上安装mysql客户端 测试: 启动mysql1,mysql2 server上的MySQL服务,注意selinux和firewalld的配置。 启动MyCat服务, ./startup_nowrap.sh 注意selinux和firewalld的配置,防止客户端连接不上, 我使用MySQLWorkbench连接的,MyCat的连接信息为:192.168.14.147:8066 root:123456 执行如下脚本: use test_db; create table t_user (id int not null primary key,name varchar(100)); insert into t_user(id,name) values(1,’hello mycat’); insert into t_user(id,name) values(2,’javacoder.cn’); select * from t_user where id=2; 操作成功,验证了MyCat的建表,插入,主键查询功能。select […more]

centos7实践LVS+keepalived

Nov 1, 2016 | | Say something

网上有很多关于这个主题的配置,要么是陈旧的,要么是错误,胡乱转载,有时参考这些文章,反而给你的工作带来更大的麻烦。经过实践,博主javacoder.cn将其整理成文,转载请注明出处,希望对你有所帮助。 其实keepalived集成了LVS的功能,所以理论上只要安装keepalived就好了,可选安装ipvsadm,ipvsadm命令能查看你通过keepalived配置的LVS是否正确, 本文使用NAT模式,NAT简介如下 用过vmware的人都知道连接方式之一就是NAT模式,NAT用于内网和外网的互联,当内网请求外网的资源的时候,在路由处,将数据包的源地址改为路由器的地址,并记录真正的源地址;当请求的资源返回到路由处时,将目的地址改为保存的源地址,并将包转给源地址。 实践使用vmware虚拟机测试的,本示例使用nat模式,拓扑图如下: 可以看到Router1和Router2谁成为master时,谁占有内网VIP和外网VIP,real_server的网管指向内网VIP,这点至关重要。 实践步骤: 准备步骤 防火墙的配置不在本文的范围,请关闭selinux和firewall systemctl disable firewalld systemctl stop firewalld setenforce 0 vi /etc/selinux/config 改如下行SELINUX=disabled 安装keepalived,ipvsadm yum install keepalived yum install ipvsadm 配置keepalived 修改/etc/keepalived/keepalived.conf global_defs { @唯一标识,每台服务器不一样 router_id LVS_DEVEL } vrrp_sync_group VRRP1 { #组的作用是当组内的一个vrrp_instance故障时,将整个组的vrrp_instance都按照故障处理 group { VI_1 VI_2 } } #外网的VIP配置 vrrp_instance VI_1 { state MASTER interface eno16777736 virtual_router_id 51 […more]

CAS返回用户的基本资料[基于数据库]

Sep 25, 2016 | | Say something

相关的视频教程观看地址:单点登录系列视频教程 CAS3.0协议,添加了一个可选的cas:attributes 属性,用来返回用户的基本资料 设置步骤如下: 1、修改deployerConfigContext.xml <bean id=”attributeRepository” class=”org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao”> <constructor-arg index=”0″ ref=”dataSource”/> <constructor-arg index=”1″ value=”select email, phone_number from cas_user where {0} “/> </bean> <!– <bean id=”attributeRepository” class=”org.jasig.services.persondir.support.NamedStubPersonAttributeDao” p:backingMap-ref=”attrRepoBackingMap” /> <util:map id=”attrRepoBackingMap”> <entry key=”uid” value=”uid” /> <entry key=”eduPersonAffiliation” value=”eduPersonAffiliation” /> <entry key=”groupMembership” value=”groupMembership” /> <entry> <key><value>memberOf</value></key> <list> <value>faculty</value> <value>staff</value> <value>org</value> </list> </entry> </util:map> –> 注释掉原来的attributeRepository bean, 声明SingleRowJdbcPersonAttributeDao的实例,官方默认的基于数据库的属性获取有两个实现类MultiRowJdbcPersonAttributeDao和SingleRowJdbcPersonAttributeDao,在此我们使用基于单行版本。 […more]

给准备从事java开发的毕业季同学的建议

Sep 24, 2016 | | Say something

欢迎大家反馈呀,觉得有帮助帮忙点个赞,不好请吐槽啦 推荐大家观看:面试加油站 序言: 很多同学的青春都献给了dota或者LOL,这也无可厚非,谁没年轻过呢,可是又是一年毕业季,大家将要企业的挑选和社会的检验。很多同学每次都是志在必得的前去面试,却一次次铩羽而归。渐渐地开始怀疑自己,看到周围的同学都陆续的找到工作,自己不由自主的开始慌张起来了。下面是我总结的一些建议,希望对大家有所帮助。 1、系统复习的重要性 面试即是对我们专业知识的一个考量,也是对我们临场发挥的一个考量,俗话说只有胸有成竹,才能做到信手拈来,系统的复习真的很重要,专业知识的复习不是高中时地史政的复习,只要记住了就好了,这是需要我们理解性记忆的。比如有的面试官会问”问什么我们要重载自定义对象的equals()和hashCode()方法”,有的则会问”使用自定义的对象作为Map的key需要注意些什么”,实践是检验真理的唯一标准,像这样的问题大家最好是敲敲代码实践验证一下。 2、复习的参考范围: 1)、java基础 比如Object有哪些方法,各个方法的作用。String的操作,StringBuidlder,StringBuffer的区别。hashmap,ConcurrentHashMap的区别。java的值传递。ArrayList,LinkedList的区别。面向对象的概念,继承、多态、封装。接口和抽象类的区别。还有自增操作(i++)。位操作。异常的机制。synchronized关键字的使用,这些大家最好是看看javadoc,然后亲自实践一下,如果你懂一定jvm的基础知识,了解java反射,其实了解点皮毛,比如它的分代回收机制也能让你的简历显得与众不同。 2)、数据库 大家不要以为自己会一个单表的增删改查就足以应付面试,这远远是不够的。比如范式的概念,数据库的隔离级别,乐观锁和悲观锁。自join(比如表结构为(成绩id,课程ID,学生id,成绩)需要查询出(张三,语文,数学,外语)这样的结果)。数据库的索引,如何建立高效的索引,什么是hash索引,什么是B树索引,它们有什么不同。exists关键字的使用。什么是聚簇索引。如何使用数据库的查询执行计划优化SQL(比如MySQL的explain)。 3)网络编程 各个套接字接口的作用,以及一个典型应用的流程,比如你写了一个网络聊天室,那么整个的网络交互流程是什么样的。还有现在大火的NIO编程。这个领域我基本没有使用过,所以抱歉啊,不能更细粒度的分享了,不准备从事这个领域的也可以暂时不用了解。 4)java WEB编程 filter 的概念,多个filter的执行顺序。servlet的请求映射规则。中文乱码问题。OSI的七层模型,http相关的基础知识,比如redirect的code=302,404资源没找到,500以上的错误是服务器内部错误。200表示服务器正确处理请求。了解Accept-Header,比如如何请求返回一个json数据而不是html页面。REST接口一定能让你的简历增色不少。Ajax请求。反而一个具体的jsp页面怎么写在面试的时候真的很少提及。 5)多线程部分 Thread的run()和start()方法的区别。线程如何实现同步,如何将一个集合进行线程安全化,比如Collections.synchronizedList(list)能让该list是线程安全的。不但要了解synchronized的关键字,还要了解java.util.concurrent.locks包下的ReentrantLock等类的机制。java.util.concurrent包是一个值得深挖的矿,比如线程池的创建ExecutorServcie等,生产者消费者模式。 6)算法和数据结构 那几种典型的内存排序算法,冒泡排序,堆排序,归并排序,快速排序,简单排序等,以及各个排序算法的时间复杂度。树的遍历算法以及复杂度。二分查找等。 7)linux的基本操作 java在生产环境基本都是部署在linux上的,了解linux、以及在linux下部署java应用。也是一个闪光点。 8)java WEB框架 比如常见的SSH和SSM,了解为什么要用这些框架。了解spring的依赖注入和AOP功能,了解控制器的工作流程,无论是spring mvc还是Struts无非就是请求分发的功能,spring mvc将请求分发到@controllr注解的类中,struts将请求分发到@Acttion注解的类中。mybatis和hibernate都是数据库的ORM框架,都是讲数据库表中的记录映射为java的vo。比起我们手动的jdbc操作能提高效率和不容易出错。熟悉这整个框架的搭建流程,最好自己动手搭建。切记只会在别人搭建好的框架下垒代码就往简历上写熟悉这个框架。 9)设计模式 如果感兴趣就系统的学习吧,不感兴趣或者时觉得空洞就了解常用的吧,比如单例模式,工厂模式(spring的PropertiesFactoryBean类是对这两个模式的完美解释),适配器模式(spring mvc的HandlerAdapter接口),装饰模式(HttpservletRequest对象典型的装饰模式使用),构建者模式(spring-web的Jackson2ObjectMapperBuilder)等。最好是能列举你在项目中用到的或者在著名的源码中遇到的。 10)大伙复习的时候可以借鉴这个列表,但是不尽限于此喔。 3、谈谈工作经验 很多同学在找工作的时候,很愁的一个问题是所有的招聘岗位都需要工作经验或者项目经验。如果你做过实际的项目那么恭喜你已经比别人多了一个筹码。没有工作经验的同学也不要着急。诸葛亮出山前不是也没带过兵吗?但是诸葛亮出山前可不是在他的茅屋中天天打LOL的,他可是天天分析天下形势,在脑海中一遍一遍模拟演习应对之策,当刘备面试他的时候,才能对答如流。这里的工作经验和项目经验强调的不是工作的经验和做项目的经验。没有工作没关系,没有做过真正的项目也没关系。我觉得可以通过如下的途径获取经验: 1)自己动手写一个系统,在实际操作的过程中肯定会遇到这样那样的问题,比如中文编码问题,解决问题的过程也就是积累经验的过程啦,自己动手做项目的另一个好处是毕竟后面毕业论文的时候还需要呢 2)阅读一个有源码的案例。然后将其吃透 3)深度学习一个开源框架,了解它的原理,如果能了解它的源码那么更能证明你是一名合格的社会主义接班人啦 最好祝大家都能拿到满意的OFFER!

CAS使用memcached存储ticket

Sep 22, 2016 | | Say something

相关的视频教程观看地址:单点登录系列视频教程 CAS默认的TicketRegistry是DefaultTicketRegistry,默认的实现是基于内存中的一个ConcurrentHashMap来存放TicketRegistry数据的,如果CAS重启,那么TicketRegistry数据就会丢失,而且也不便于CAS的集群,所以在生产中更多的是使用其他的TicketRegistry存放技术,本文介绍基于memcached的实现。 操作步骤 修改pom.xml,添加依赖 <dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-integration-memcached</artifactId> <version>${cas.version}</version> </dependency> 这个地方官方文档是陈旧的!! 修改deployerConfigContext.xml <!– <alias name=”defaultTicketRegistry” alias=”ticketRegistry” /> –> <alias name=”memcachedTicketRegistry” alias=”ticketRegistry” /> 默认是未加密的,如果需要加密,请添加如下的配置 <alias name=”shiroCipherExecutor” alias=”ticketCipherExecutor” /> 修改cas.properties,添加 memcached.servers=192.168.14.129:11211 表示memcached服务器的地址 如果有加密,请添加加密的key[16字符]和签名的key[八进制数据,512位] ticket.encryption.secretkey=C@$W3bSecretKey! ticket.signing.secretkey=szxK-5_eJjs-aUj-64MpUZ-GPPzGLhYPLGl0wrYjYNVAGva2P0lLe6UGKGM7k8dWxsOVGutZWgvmY3l5oVPO3w 参考信息 https://apereo.github.io/cas/4.2.x/installation/Memcached-Ticket-Registry.html

CAS使用数据库进行用户认证

Sep 21, 2016 | | Say something

相关的视频教程观看地址:单点登录系列视频教程 1、新建一张用户表 需要保护用户名和密码字段,我下文使用的是cas_test数据库下的cas_user表 2、修改pom.xml,引入相关依赖 <dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-support-jdbc</artifactId> <version>4.2.2</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> 这三个依赖分别是CAS对数据库支持jar,连接池jar, 和mysql驱动jar。 cas-server-support-jdbc的版本和你cas-overlay-template工程的版本一致 3、修改deployerConfigContext.xml 文件,添加如下配置 <bean id=”dataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource” p:driverClass=”${database.driverClass}” p:jdbcUrl=”${database.url}” p:user=”${database.user}” p:password=”${database.password}” p:initialPoolSize=”${database.pool.minSize}” p:minPoolSize=”${database.pool.minSize}” p:maxPoolSize=”${database.pool.maxSize}” p:maxIdleTimeExcessConnections=”${database.pool.maxIdleTime}” p:checkoutTimeout=”${database.pool.maxWait}” p:acquireIncrement=”${database.pool.acquireIncrement}” p:acquireRetryAttempts=”${database.pool.acquireRetryAttempts}” p:acquireRetryDelay=”${database.pool.acquireRetryDelay}” p:idleConnectionTestPeriod=”${database.pool.idleConnectionTestPeriod}” p:preferredTestQuery=”${database.pool.connectionHealthQuery}” /> <!– <alias name=”acceptUsersAuthenticationHandler” alias=”primaryAuthenticationHandler” /> –> <alias name=”queryDatabaseAuthenticationHandler” alias=”primaryAuthenticationHandler” /> <alias name=”defaultPasswordEncoder” alias=”passwordEncoder” […more]

OpenID协议流程

Aug 29, 2016 | | Say something

dumb mode流程 1、提示end user输入OpenID identity,identity是一个URI,比如http://carol.example.com/Alice 2、官方文档叫(Relying Party),也就是我们的服务提供方,对用户的OpenID identity URL进行标准化,然后通过http GET方法请求该URL,返回含如下header的html页面 <link rel=”openid.server” href=”/http://carol.example.com/openidserver.cgi”> 3、重定向end user的浏览器到openid.server(上一步获取到的server url),含如下的参数 openid.mode = checkid_setup 一种验证用户id的模式,先让openid server获取用户浏览器的控制权,完成验证后,然后再通过openid.return_to参数指定的值将控制权重定向给Relying Party。 openid.identity = http://carol.example.com/Alice end user 提供的OpenID identity openid.return_to = http://bob.example.com/comment.cgi?session_id=Alice&nonce=123456 当完成认证后希望openid server将用户浏览器重定向的地址,当然openid server会附上一些额外的参数来验证end user 就是OpenID identity标识的那个人。nonce一个随机值,让这个重定向url唯一,不易被伪造。 4、openid.server验证用户的真实性,openid协议不关心认证的过程,所以openid.server可以自由发挥,无论是比对用户名和密码也好,使用指纹识别也罢,使用视网膜识别也行, 5、完成认证后,openid.server将end user的浏览器重定向到第三步提供的openid.return_to,并附上如下的值: openid.mode = id_res “id_res”表示end user就是OpenID identity所声明的那个人,可选的值还有”cancel”,表示用户取消了认证 openid.return_to = http://bob.example.com/comment.cgi?session_id=Alice&nonce=123456 第三步的openid.return_to openid.identity = http://carol.example.com/Alice 第三步的openid.identity […more]

MySQL server UUID 重复

Apr 3, 2016 | | Say something

今天使用vmware 虚拟机实验MySQL (5.7)的复制特性时,我将按照好MySQL数据库的虚拟机复制多分作为从库,遇到如下问题: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593 这个错误的产生是MySQL 的复制功能除了使用server-id,还会使用自动产生的uuid,如果没有这个uuid,就自动产生一个,然后写入datadir目录下的auto.conf文件中,所以我们将这个文件删除