eureka注册中心设置用户名密码


2018-01-04 17:20
zpq
233
  1. 加入安全认证依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 在application.properties加入认证的用户名和密码
security.user.name=你的用户名
security.user.password=你的密码
  1. 修改url注册
eureka.client.serviceUrl.defaultZone=http://${security.user.name}:${security.user.password}@127.0.0.1:${server.port}/eureka/

spring boot security logout use HTTP POST


2017-08-31 16:48
zpq
102

Adding CSRF will update the LogoutFilter to only use HTTP POST. This ensures that log out requires a CSRF token and that a malicious user cannot forcibly log out your users.

One approach is to use a form for log out. If you really want a link, you can use JavaScript to have the link perform a POST (i.e. maybe on a hidden form). For browsers with JavaScript that is disabled, you can optionally have the link take the user to a log out confirmation page that will perform the POST.

If you really want to use HTTP GET with logout you can do so, but remember this is generally not recommended. For example, the following Java Configuration will perform logout with the URL /logout is requested with any HTTP method:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
   WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .logout()
          .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
  }
}

https://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle/#csrf-logout

Tess4J OCR使用教程


2017-07-26 15:25
zpq
129

介绍

Tesseract-OCR支持中文识别,并且开源和提供全套的训练工具,是快速低成本开发的首选。而Tess4J则是Tesseract在Java PC上的应用。在英文和数字识别中性能还是不错的,但是在中文识别中,无论速度还是识别率还是较弱,建议有条件的话,针对场景进行训练,会获得较好结果,本文仅对目前Tess4J的用法进行介绍。

教程

  1. Tess4J官网下载源码包
    官网下载

  2. 创建Java项目并配置

网上不少文章会提到DLL,其实在最新的版本,如果源码包里面有dist路径,则只需要配置该jar包和lib中相关的jar即可。
注意点1:将dist/tess4j-3.4.0.jar 及 lib/*.jar加入项目
注意点2:tessdata一定要配置到根目录,否则需要在代码中指定dataPath

  1. 创建一个main
public static void main(String[] args) throws TesseractException {
        ITesseract instance = new Tesseract();
        //如果未将tessdata放在根目录下需要指定绝对路径
        //instance.setDatapath("the absolute path of tessdata");
        // 我们需要指定识别语种
        instance.setLanguage("chi_sim");
        // 指定识别图片
        File imgDir = new File("test_chinese_07.PNG");
        long startTime = System.currentTimeMillis();
        String ocrResult = instance.doOCR(imgDir);
        // 输出识别结果
        System.out.println("OCR Result: \n" + ocrResult + "\n 耗时:" + (System.currentTimeMillis() - startTime) + "ms");
    }
  1. 注意三处:
  • tessdata放在与src同级的根目录下,否则需要指定dataPath
  • 如果需要识别英文之外的语种,需要指定识别语种。
  • 其他语种下载地址:其他语种下载地址

微信支付宝支付注意事项


2017-07-09 11:07
zpq
95

微信支付

Q 商品名称为中文时返回签名失败
A 在签名是需要将字符串转成ISO8859-1格式

//DigestUtils 是第三方commons-codec库
String sign = DigestUtils.md5Hex(signstr.toString().getBytes("ISO8859-1")).toUpperCase();

Q 创建完订单进行扫码支付时,中文商品名称显示乱码
A 微信中用的编码是ISO8859-1 所以需要将字符串转为ISO8859-1格式

String body = new String (goodname.getBytes("UTF-8"),"ISO-8859-1")

Q 如何获取微信成功支付的回调内容
A 回调的内容是xml字符串,我们需要手动解析

// HttpServletRequest request #spring boot 
BufferedReader reader = request.getReader();
StringBuffer inputString = new StringBuffer();
String line ;
while (( line = reader.readLine()) != null) {
	inputString.append(line);
}
String xmlstr = inputString.toString();

支付宝支付

Q 如何正确的签名
A 支付宝签名要比微信的容易的多,而且出错概率较低,签名方式分为RSARSA2,两种方式分别都需要商户自己生成 公钥和私钥,长度必须是2048 私钥保存在本地,公钥需要上传到 商户中心 -- 开发者中心,上传时需要去掉头尾部字符串,并且去掉换行,上传时请分清楚打算用哪个加密,别RSA加密,却上传到RSA2上面.

Q 进行扫码支付时,商品中文是乱码
A 注意提交的参数charset是什么格式,如格式正确,在请求订单是header 部分需要声明字符编码

HttpPost post = new HttpPost(url);
httpPost.setHeader("Content-Type","application/x-www-form-urlencoded");
httpPost.setEntity( new UrlEncodedFormEntity(dataList,"GBK"));

Q 支付成功回调
A 支付宝默认开通 TRADE_SUCCESSWAIT_BUYER_PAY 支付通知,TRADE_CLOSEDTRADE_FINISHED 需要申请开通,回调的内容数据也很好的获取.

// HttpServletRequest request
request.getParameter()

Q 商品名称英文时签名成功,中文时签名失败
A 该问题应该是提交数据时格式编码有误,小伙伴试试这样。在签名时,把签名的字符串转成GBK编码,form 提交时 也用GBK提交
支付宝 判断字符编码格式主要依据于头部Content-Type属性 如"Content-Type :application/x-www-form-urlencoded;charset=utf-8那么字符编码就是utf-8跟公共参数里的charset没有什么关系,这里推荐使用Okhttp包。
微信则需要把中文字符串转成ISO-8859-1编码,然后再进行签名。

SpringMVC请求乱码解决方案


2017-04-21 17:27
zpq
24

先在web.xml设置字符编码utf-8

<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

如果无法解决接收参数乱码

设置Tomcat配置 URIEconding="UTF-8"
编辑文件 /conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />