正在查看: 技术文章 分类下的文章(第 1 页 / 共 14 篇)

使用maven快速创建java控制台程序

经常使用vs code,不再想打开笨重的idea或者eclipse,直接使用maven测试一下代码,可以使用以下方法。首先使用命令:

»阅读全文

Tags: java,maven

使用acme.sh自动更新网站及七牛子域名的证书

acme.sh是个好东西,七牛也是个好东西,只是七牛没有自动更新证书的方法,好在七牛的sdk是可以做到的。对于一些老网站,没有使用lnmp管理host,则可以手动的方式来管理证书。本文以阿里云为例,说明更新的过程。

在host上下载并安装acme.sh,参考地址:https://github.com/Neilpang/acme.sh/wiki/说明

»阅读全文

在CentOS下快速建立laravel环境

使用lnmp安装环境,但在此之前安装screen,因为编译时间比较长,ssh会断掉,使用screen可以保持窗口长时间显示:

yum install screen

开始安装lnmp:

screen -S lnmp
wget -c http://soft.vpser.net/lnmp/lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp

在此之前,可以在下载下来的lnmp.conf脚本下修改编译参数

»阅读全文

Tags: laravel,lnmp

SSL在nginx和IIS下的配置与Renew

nginx下推荐用cert-auto,傻瓜模式,按照命令来就行了。cert-auto的基本验证模式是在网站的目录下创建一个._acme-challenge的文件夹,里面会有一些验证信息。关键的是,要确保你的网站是可以通过80端口正常访问的,因为它会去验证这个文件。如果不能验证呢?可以通过添加DNS TXT记录的方式执行。

»阅读全文

Tags: iis,nginx,ssl

electron app开发遇到的问题总结

最近用electron开发一个远程桌面的跨平台app,其中windows远程使用自带的rdp,其他系统使用freeRDP。该APP中用到大量的原生模块,也就是跟OS相关的模块,比如drivelist,是一个读取硬盘信息的包,usb-detection是一个探测是否有USB插入的包,集成这些包最大的问题是,跟自己使用Electron的Node引擎有关,一般来说需要重新编译,才可以使用。这个错误的典型特征是,控制台报错,不断地Try模板编译后的路径,然后告诉你找不到那个模块。

»阅读全文

Tags: electron

PHP升级及Laravel部署

CentOS的版本太低,6.5。自带的php版本也太低,laravel的最低要求是6.7,需要升级php。在centos中直接使用: yum update php,会提示已经是最新的了,是因为rpm的原因,当前仓储已不再更新php,php5.3已经是最高版本,可以通过更改rpm的方式获得更新:

»阅读全文

Tags: laravel,php

ABP的语言及使用signalr

折磨人的跨域问题:

XMLHttpRequest cannot load https://api.taskexe.com/signalr/negotiate?clientProtocol=1.5&token=0J2rv2jZ…bpcommonhub"},{"name":"messagehub"}]&_=1488597450711. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'https://taskexe.com' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.

意思大约是说,如果Cors使用通配符*则不允许使用 Access-Control-Allow-Credentials: true,两者是矛盾的。在signalr的跨域请求时,application_start中使用了,跨域:

»阅读全文

Tags: cors,abp,signalr

最近遇到的一些坑集合

Angular

异步获取到的数据,在视图上使用自定义filter时,控制台总是报错 input undefined ,这是因为filter会在anagular的第一次消息循环时尝试运行,异步数据尚未加载进来,尝试绑定时数据固然不存在。所以要做判断。

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider{ 
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            context.OwinContext.Response.Headers["Access-Control-Allow-Origin"] = "*";
   //....

}
}

CORS

基于web api的应用常常使用基于token的验证方式进行api的访问管理。一般步骤是:

(1)用户输入用户名和密码,提交到web api host.

(2)web api host验证后,返回token给Client, Client使用Cookie存储下来。

(3)后续Client继续是用token访问web api, web api做验证。

这个方法比较简单可行, 资源服务器和验证服务器部署在一个进程里。但是最大的问题是,token过期后如何刷新的问题。简单的方法是把token的过期时间设置的比较长,如一个 月,但不够安全,不符合token的设置本意,所以需要用refresh token的验证机制。简单地说就是,web api host验证后返回两个token,一个是基本的access token,另一个是refresh token。access token过期后,可以用refresh token换取一个新的access token。这里遇到一个cors的问题。即使在web api 的config里加了如下语句:

public static void EnableCors(HttpConfiguration config)
        {
            var cors = new EnableCorsAttribute("*", "*", "*");
            config.EnableCors(cors);
        }

也不行,原因是oauth server的获取access token,不直接经过web api。所以要对oauth server的响应头添加allow-origin。具体如下:

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            context.OwinContext.Response.Headers["Access-Control-Allow-Origin"] = "*";
           //....
       }
}

但是,依然有问题。因为浏览器会发出预检请求(preflight ),api host不能正确应答,以前的cors配置风格不支持预检请求,故需要:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
   }
}

问题即可解决。参考地址:

http://stackoverflow.com/questions/24989769/cors-is-not-working-in-web-api-with-owin-authentication

http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

利用微信服务号开发邀请好友同时获得优惠券功能

为了推广需要,想在微信服务号里加入一个邀请好友关注服务号获得优惠券的功能。如A已关注了微信服务号,他想邀请他的好友B也关注该微信号。B关注后,A和B都将获得一个优惠券。具体的操作过程如下:

1.A关注微信服务号;

2.微信服务号的菜单有【我的邀请码】,A点击该菜单服务号向用户发送一张二维码,该二维码是携带了A的ID信息和其他扩展信息的。并同时发送一句与此类似的说明:“请将该二维码发送给您的朋友,您和您的朋友都将获得更多优惠券。”

3.A将二维码转发给自己的好友B;

»阅读全文

jFinal的启动顺序

1. 首先 启动JFinal中的main()函数,默认启动一个JettyServer的实例。

2. JettyServer实例会根据配置文件web.xml的Filter构建一条管道,这个实例就是com.jfinal.core.JFinalFilter,并且需要指明JFinalFilter所需构造参数FilterConfig。 因此,每个Application都需要自己来写一个FilterConfig类,来完成初始配置。

»阅读全文

Tags: jFinal,java