微信公众号自动登录

作者:JerryXia | 发表于 , 阅读 (0)
除了QQ, 当前最火爆的社交工具无非是微信, 或许连QQ都难以匹敌, 更重要的是其更是一个平台, 一个可持续扩展的平台, 无论是公众号, 微店, 支付等, 都使得微信被运用得更为广, 再而深。之前做了一个关于公众号对接的, 实现用户只需第一次登录即可永久自动登录的功能, 觉得是个比较实用的功能, 分享如下:
要实现该功能, 主要是使用OAuth2实现第三方登录, 看看OAuth2原理:微信浏览器判断(若是微信浏览器, 其User-Agent将包含"MicroMessenger")public static Boolean isWxClient(HttpServletRequest request){String header = request.getHeader("USER-AGENT");return header != null && header.contains("MicroMessenger");}自动登录需要用到的几个URL:// 微信授权页面private static final String authorizeUrl = "https://open.weixin....阅读全文

架构之路

作者:JerryXia | 发表于 , 阅读 (0)
搜索搜索作为一个站点比较基本的功能,通常是不太可能直接查询数据库,特别是用户相关的系统,我们通常会先将需要查询的数据建立索引,在查询时,只需到索引库中进行查询,一旦建立了索引,就应该想到什么时候更新索引,特别是一些比较实时的业务数据等。当然,不是只有需要搜索的数据才能使用搜索技术,前台大部分数据库都可以使用搜索技术,这不仅减小数据库的压力,也会使得系统查询能力得到很大提升。常用的搜索实现有Lucene,Solr,ElasticSearch(推荐)。
服务解耦当服务模块越来越多时,服务之间的依赖关系有可能就变得比较复杂,或者说比较重,一个服务就被多个服务所依赖,那么这个服务将变成一个依赖瓶颈,一旦该服务不可用,则有可能影响比较大,如下面这种:这里短信服务已经被多个模块所依赖,这时我们可能就需要进行解耦,即通过一个中间层解除服务之间的,其中消息中间件(MQ)无疑是比较好的解决方案:...阅读全文

Mybatis事务管理

作者:JerryXia | 发表于 , 阅读 (0)
JdbcTransaction使用JDBC的Connection对象的提交和回滚来管理事务,并通过内部的DataSource对象来获取Connection对象。public class JdbcTransaction implements Transaction {private static final Log log = LogFactory.getLog(JdbcTransaction.class);protected Connection connection;            //当前JDBC连接protected DataSource dataSource;            //数据源protected TransactionIsolationLevel level;  //事务级别protected boolean autoCommmit;public JdbcTransaction(DataSource ds, TransactionIsolationLevel desiredLevel, boolean desiredAutoCommit) {dataSo...阅读全文

系统重构的事儿

作者:JerryXia | 发表于 , 阅读 (0)
1. 旧系统代码基本没有规范,代码没有质量,以至他人难以维护。2. 数据库设计混乱。对于数据库设计没有一些基本规范,只是想当然得加减字段表,没有一个整体规划。各种杀手级SQL居然沦为炫耀的噱头(你看,我多么牛逼,能写这么复杂的SQL)。3. 各子系统均以web应用独立开来,可能修改某个地方,就需要重新部署多个应用,这对系统无疑是一种隐形伤害,所以需要将系统进一步拆分,即高类聚,低耦合。4. 考虑到未来的业务量增加,需要更稳定可靠的服务和存储。
...阅读全文

Nginx压缩Web资源文件

作者:JerryXia | 发表于 , 阅读 (0)
对于Web前端的一些资源文件, 如JS, CSS等在经过代理服务器时都应该做一些压缩处理。对于Nginx, 我们可以通过ngx_http_gzip_module模块实现资源文件压缩处理。
这是压缩前的请求这是压缩后的请求压缩效果还是很明显的, 只需对nginx.conf作如下配置gzip on;                #开启压缩gzip_disable "msie6";   #不对IE6进行压缩处理gzip_comp_level 6;      #压缩级别1-9, 不一定越高越小, 达到某一级别, 文件将不能再被压缩gzip_min_length  1100;  #文件大小超过该值, 才压缩gzip_buffers 16 8k;     #压缩想响应的缓冲个数及大小(默认大小为内存页大小)gzip_proxied any;       #任何proxygzip_types       text/plain application/xml text/css text/js text/xml application/javascript application/x-javascr...阅读全文