欢迎来到Heck's Blog,专业承接拿站、企业建站、仿站、网上商城架构、门户网站搭建、空间域名注册、软件定制等项目。关注网络安全,因为专注,所以专业,懂得放弃,才能收获。有事请发邮件至i@heckjj.com,请记住本站网址:http://www.heckjj.com,多谢。
5月28
在开发中如果我们遇到这种需要验证的接口应该怎么调用呢?
这里给出一个Basic Authentication 接口调用的工具示例:
package com.heckjj.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;

import org.apache.commons.codec.binary.Base64;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;


public class GetAPIResultUtil {


    /**
     *
     *
     * @param url
     * @param param
     * @return
     */
    public static String getAPIResult(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            URLConnection conn = realUrl.openConnection();
            //conn.setConnectTimeout(5000);
            String plainCredentials = "heck:12345";
            String base64Credentials = new String(Base64.encodeBase64(plainCredentials.getBytes()));
            conn.setRequestProperty("Authorization", "Basic " + base64Credentials);
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("Content-type", "application/json");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(conn.getOutputStream());
            out.print(param);
            out.flush();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
                in.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
}

至此对基本认证(Basic Authentication)的完整过程就基本实现了,希望对大家有所帮助!
5月7
我重启idea不行,rebuild也不行,mvn reimport也不行。
最后我删除了一个文件的import语句,然后IDEA自动编译,就正常了。

ps : 我保证各项配置,jdk , project structure, java compiler等等都是正常的。因为项目之前没有出错。


解决问题:idea缓存,清除一下重启(肯定是目录变动过,我就是为了扩展C盘,就先把目录改过又改回来,虽然最终目录没变 但是中间是有变更的)
点击在新窗口中浏览此图片
4月19
我现在是第一次打开抽屉子组件会发生请求,但是关闭抽屉组件,再一次打开就不请求了,数据没有改变,还是上一次的内容,导致我审批时通过的是另外一条的。
现在想要的效果是我每点击一次图标抽屉组件打开,就发送一次请求,请求最新的数据。
解决方法:

1、visible.sync:双向绑定值。
初始情况下通过该值控制 dialog显示。dialog关闭的时候,element自动设置该值为false。
当子组件执行 close 事件的时候,不仅改变了自己内部的 isShow 的值,而且还将 父组件的 visible的状态发生了改变.

2、在子组件 close 方法中,虽然已经将 isShow 改变为 false,但是并没有通知到 父组件,而在父组件中,控制弹出框的现实和隐藏是通过 show 。点击子组件的关闭按钮时,父组件的 show 没有发生改变,这时候需要用visible.sync。

点击在新窗口中浏览此图片
这样就可以每次打开就重新渲染一次子组件;但有一个不好的就是如果一直重复点击,就会重复渲染,会影响效率。
4月14
数据库中的数据 需要批量的替换 ,替换某个词或特殊符号

sql语句:

update 表名 set 字段名=REPLACE (字段名,'原来的值','要修改的值')

update  pmsprojectmember set projectMemberType=REPLACE(projectMemberType,'BusinessOprator','BusinessOperator')

update user_item set addr=REPLACE (addr,'长沙','湘府')

添加条件:
update user_item set addr=REPLACE (addr,'长沙','湘府') where time<'2021-1-5';
2月18
关于Hutool工具类之HttpUtil如何使用可以参考官方文档Hutool之HttpUtil

其实使用Http和Https使用的方式是一样的。

建议大家可以看看HttpUtil的源码,感觉设计的挺不错的。

导入Maven依赖
<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-all</artifactId>
   <version>4.1.0</version>
</dependency>
编写测试类(使用Junit单元测试)

@Test
public void testHttps() throws Exception {
    
    JSONObject json = new JSONObject();
    json.put("username", "1332788xxxxxx");
    json.put("password", "123456.");
    
    String result = HttpRequest.post("https://api.heckjj.com/1/users")
            .header("Content-Type", "application/json")
            .header("X-heck-Application-Id","2f0419a31f9casdfdsf431f6cd297fdd3e28fds4af")
            .header("X-heck-REST-API-Key","1e03efdas82178723afdsafsda4be0f305def6708cc6")
            .body(json)
            .execute().body();
    
    
       System.out.println(result);
            
            
}

方法解释(上面采用的是一种叫链式编程的方式):
header对应的是请求头。
body对应的是请求体(包含参数和参数值)。
HttpRequest里面包含Post、GET、Delete、Put等常用的RestFul方式。

打印如下:

{"createdAt":"2019-04-30 10:42:07","objectId":"6cfdb77081","sessionToken":"269e433440c9e65b8058d016df703ccb"}
2月18
1.这是mongodb没有设置用户名和密码的配置   test是数据名
spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/test
  

2.这是mongodb设置了用户名和密码的配置   test是数据名

在mongodb的test数据库创建用户和密码


use test
db.createUser(
     {
       user:"root",
       pwd:"123456",
       roles:[{role:"root",db:"admin"}]
     }
  )
  


spring:
  data:
    mongodb:
      uri: mongodb://root:123456@localhost:27017/test   #root是在test数据库下设置的用户名,123456是在test数据库下设置的密码
2月8
  /*验证IP是否属于某个IP段
   *
   * ipSection    IP段(以'-'分隔)
   * ip           所验证的IP号码
   *
   */
  public static boolean ipExistsInRange(String ip, String ipSection) {
    ipSection = ipSection.trim();
    ip = ip.trim();
    int idx = ipSection.indexOf('-');
    String beginIP = ipSection.substring(0, idx);
    String endIP = ipSection.substring(idx + 1);
    return getIp2long(beginIP) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIP);
  }

  public static long getIp2long(String ip) {
    ip = ip.trim();
    String[] ips = ip.split("\\.");
    long ip2long = 0L;
    for (int i = 0; i < 4; ++i) {
      ip2long = ip2long << 8 | Integer.parseInt(ips[i]);
    }

    return ip2long;
  }

  public static long getIp2long2(String ip) {
    ip = ip.trim();
    String[] ips = ip.split("\\.");
    long ip1 = Integer.parseInt(ips[0]);
    long ip2 = Integer.parseInt(ips[1]);
    long ip3 = Integer.parseInt(ips[2]);
    long ip4 = Integer.parseInt(ips[3]);
    long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4;

    return ip2long;
  }

  public static boolean isIntranetIP(String ip) {
  ipExistsInRange(ip, "172.16.0.0-172.31.255.255") || ip.startsWith("10.");
        //10.10.10.116 是否属于固定格式的IP段10.10.1.00-10.10.255.255

        String ip="10.10.10.116";

        String ipSection="10.10.1.00-10.10.255.255";

        boolean exists=ipExistsInRange(ip,ipSection);

        System.out.println(exists);

        System.out.println(getIp2long(ip));

        System.out.println(getIp2long2(ip));
  }
1月25

mongodb 设置用户密码权限

09:03数据库  From: 本站原创
1、设置管理员账户

use admin
db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
mongodb中的用户是基于身份role的,该管理员账户的 role是 userAdminAnyDatabase。 ‘userAdmin’代表用户管理身份,’AnyDatabase’ 代表可以管理任何数据库。

2、验证

db.auth("useradmin", "adminpassword")
如果返回1,则表示成功。

3、修改配置文件(注意缩进)

sudo vi /etc/mongod.conf
#security:
security:
  authorization: enabled

4、重启mongodb

sudo service mongod restart
5、创建普通用户

进入mongodb,用第3步的 管理员账户登录,用该账户创建其他数据库管理员账号

  +先进行管理员认证

use admin
db.auth("useradmin", "adminpassword")
  +设置其他库的账号密码及权限

use yourdatabase
db.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })
  rote:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等
12月25
1:echo $JAVA_HOME

使用$JAVA_HOME的话能定位JDK的安装路径的前提是配置了环境变量$JAVA_HOME,否则如下所示,根本定位不到JDK的安装路径

[root@localhost ~]# java -version

java version "1.7.0_65"

OpenJDK Runtime Environment (rhel-2.5.1.2.el6_5-x86_64 u65-b17)

OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

[root@localhost ~]# echo $JAVA_HOME

点击在新窗口中浏览此图片

2:which java

首先要申明一下which java是定位不到安装路径的。which java定位到的是java程序的执行路径。那么怎么定位到java的安装路径呢?下面我们来看看例子吧,如下所示:
[root@localhost ~]# java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.5.5.el7-x86_64 u51-b31)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
[root@localhost ~]# which java
/usr/bin/java
[root@localhost ~]# ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 9月   6 22:51 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 72 9月   6 22:51 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java

点击在新窗口中浏览此图片
Tags:
12月23

MySQL的replace方法

09:20数据库  From: 本站原创
mysql中replace函数直接替换mysql数据库中某字段中的特定字符串,不再需要自己写函数去替换,用起来非常的方便,mysql 替换函数replace()
Update `table_name` SET `field_name` = replace (`field_name`,’from_str’,'to_str’) Where `field_name` LIKE ‘%from_str%’

实例:把'病假' 替换为 '--':UPDATE users SET username=REPLACE(username,'病假','--')  WHERE username LIKE '%病假%';
说明:
table_name —— 表的名字
field_name —— 字段名
from_str —— 需要替换的字符串
to_str —— 替换成的字符串

---------------------------------

mysql 里面可以用uuid()语句来生成一个UUID:

select uuid();
或 select replace(uuid(), '-', '');

直接在insert语句中插入UUID作主键的用法(简便):

insert into Price( Name, UUID, Price, BID) values('FEIFEI_TEST', uuid(), 32, 3);

------------------------------
在mysql中,可以使用uuid 来生成主键,但是用mysql的uuid()函数 ,生成的uuid是36位的,其中包含32个字符以及4个分隔符(-),往往这个分隔符对我们来说是没有用的,可以使用mysql自带的replace函数去掉分隔符

replace(uuid(),'-','')   ---->将uuid()中的‘-’,去掉,即替换成空串;

此外

upper(replace(uuid(),'-',''))用于将字符转换为大写
--------------------------------

一、replace函数
语法:replace(object,search,replace)
语义:把object对象中出现的的search全部替换成replace。
实例:

update hellotable set 'helloCol' = replace('col','heck','heckjj.com')

二、replace into函数
为什么会接触到replace into函数,是因为业务需要向数据库中插入数据,前提是重复的不能再次插入。以前用where解决的,今天才知道还有一个更简洁的方法replace。
replace具备替换拥有唯一索引或者主键索引重复数据的能力,也就是如果使用replace into插入的数据的唯一索引或者主键索引与之前的数据有重复的情况,将会删除原先的数据,然后再进行添加。
语法:replace into table( col1, col2, col3 ) values ( val1, val2, val3 )
语义:向table表中col1, col2, col3列replace数据val1,val2,val3

实例:
REPLACE INTO users (id,name,age) VALUES(123, ‘chao’, 50);
分页: 1/53 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]