小编Jor*_*son的帖子

Hibernate - 将列存储为加密,并仅在运行时解密

当从hibernate支持的webapp传递时,我有一个需要加密的数据库列.webapp在tomcat 6,Hibernate 4和Mysql上作为后备存储.

但问题是加密/解密此字段的密码只能在程序运行时使用.最初我曾希望使用AES_ENCRYPT/DECRYPT方法,这里概述得很好:

Hibernate中的DataBase加密

和这里:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-column-read-and-write

(虽然这确实是指hibernate的3.6版,但我相信它应该在4.0中相同).

但是,由于这使用以下表示法:

@Column(columnDefinition= "LONGBLOB", name="encryptedBody") 
@ColumnTransformer(
  read="AES_DECRYPT(encryptedBody, 'password')", 
  write="AES_ENCRYPT(?, 'password')")
public byte[]  getEncryptedBody() {
    return encryptedBody;
}

public void setEncryptedBody(byte[]  encryptedBody) {
    this.encryptedBody = encryptedBody;
}
Run Code Online (Sandbox Code Playgroud)

这要求在注释本身中指定密码,并且不能是变量.

有没有办法以这种方式通过hibernate使用数据库方法,但是将密码作为变量?有更好的方法吗?

java mysql security encryption hibernate

11
推荐指数
1
解决办法
6844
查看次数

为什么杰克逊在不同情况下将这些值映射两次?

我正在使用Jackson将Java对象映射到JSON,该对象是一个非常简单的pojo类,如下所示:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonAutoDetect
public class Area {
    @JsonProperty("Id")
    public int Id;
    @JsonProperty("Name")
    public String Name;

    public Area() {
        Name = "";
    }

    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }

    public String getName() {
        return Name;
    }

    public void setName(String Name) {
        this.Name = Name;
    }
}
Run Code Online (Sandbox Code Playgroud)

映射代码如下所示:

ObjectMapper mapper = new ObjectMapper();

mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
            .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
            .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
            .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
            .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

areaJSON = mapper.writeValueAsString(area);
Run Code Online (Sandbox Code Playgroud)

但此时areaJSON的值如下:

{"id":0,"name":"","Name":"","Id":0}
Run Code Online (Sandbox Code Playgroud)

请注意具有不同情况的多个值.

我究竟做错了什么?

java json jackson

8
推荐指数
1
解决办法
3972
查看次数

正则表达式以匹配捕获组中的前一个或后一个字母字符

比如说我有以下数据:

ab
cd
ef
zy
ba
cd
Run Code Online (Sandbox Code Playgroud)

我希望能够以匹配第一个字符的方式匹配它,然后根据第一个字符的捕获组匹配第二个字符.

上例中的每一行都应该匹配,而类似ccaf不应该匹配.

详细说明,我的想法看起来像这样:

(基于ruby的正则表达式)

/^(?<first>[a-z])\g<first>$/
Run Code Online (Sandbox Code Playgroud)

然而,这匹配aaac两者都无效,以及预期ab.

有没有办法修改捕获组,或用类似于我想要的语法包围它?

ruby regex

4
推荐指数
1
解决办法
218
查看次数

将Unity ARCore中的AcquireCameraImageBytes()保存为存储为图像

使用Unity和新的1.1版本的ARCore,API公开了一些获取相机信息的新方法.但是,我找不到任何好的示例,例如将其作为文件保存为本地存储作为jpg.

ARCore示例有一个很好的示例,可以检索相机数据,然后在此处执行操作:https://github.com/google-ar/arcore-unity-sdk/blob/master/Assets/GoogleARCore/Examples/ComputerVision/ Scripts/ComputerVisionController.cs#L212并且有一些检索该类中的摄像机数据的示例,但没有任何保存该数据的示例.

我已经看过:如何使用Unity ARCore SDK拍摄并保存图片/屏幕截图?它使用较旧的API获取数据的方式,并没有真正详细说明保存.

我理想的是Frame.CameraImage.AcquireCameraImageBytes()通过Unity 将数据从API转换为磁盘上存储的jpg的方法.

更新

我已经开始工作了主要是在ARCore github页面上挖掘这个问题:https://github.com/google-ar/arcore-unity-sdk/issues/72#issuecomment-355134812并修改下面的Sonny的答案,所以一个人被接受是公平的.

如果其他人试图这样做,我必须执行以下步骤:

  1. OnImageAvailable在图像可用时,向Start方法添加回调以运行方法:

    public void Start()
    {
        TextureReaderComponent.OnImageAvailableCallback += OnImageAvailable;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将TextureReader(从SDK提供的计算机视觉示例)添加到您的相机和脚本中

  3. OnImageAvailable应该看起来像这样:

    /// <summary>
    /// Handles a new CPU image.
    /// </summary>
    /// <param name="format">The format of the image.</param>
    /// <param name="width">Width of the image, in pixels.</param>
    /// <param name="height">Height of the image, in pixels.</param>
    /// <param name="pixelBuffer">Pointer to raw image buffer.</param>
    /// <param …
    Run Code Online (Sandbox Code Playgroud)

c# android unity-game-engine arcore

4
推荐指数
1
解决办法
2192
查看次数

递归蜘蛛与scrapy仅抓取第一页

我正在尝试使用 scrapy 编写一个递归抓取整个网站的蜘蛛。

然而,虽然它似乎可以很好地抓取第一页,但它随后会找到该页面上的链接,但不会跟随它们并抓取这些页面,这正是我所需要的。

我创建了一个 scrapy 项目并开始编写一个如下所示的蜘蛛:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from urlparse import urljoin

class EventsSpider(scrapy.Spider):
    name = "events"
    allowed_domains = ["www.foo.bar/"]
    start_urls = (
        'http://www.foo.bar/events/',
        )
    rules = (
        Rule(LinkExtractor(), callback="parse", follow= True),
        )

    def parse(self, response):
        yield {
        'url':response.url,
        'language':response.xpath('//meta[@name=\'Language\']/@content').extract(),
        'description':response.xpath('//meta[@name=\'Description\']/@content').extract(),
        }
        for url in response.xpath('//a/@href').extract():
            if url and not url.startswith('#'):
                self.logger.debug(urljoin(response.url, url))
                scrapy.http.Request(urljoin(response.url, url))
Run Code Online (Sandbox Code Playgroud)

然后,当使用以下方式运行蜘蛛时scrapy crawl events -o events.json …

python scrapy

3
推荐指数
1
解决办法
2705
查看次数

为什么Scala地图在使用foreach迭代时会打印一个额外的值?

迭代遍历地图时:

val powers = Map("Spark man" -> "Electricity", "Bubble man" -> "Fires Bubbles", "Guts man" -> "No idea")
println(powers.size)
println(powers.foreach(man => println(man._1 + " -> " + man._2)))
Run Code Online (Sandbox Code Playgroud)

为什么在打印时似乎产生第四个项目:

3
Spark man -> Electricity
Bubble man -> Fires Bubbles
Guts man -> No idea
()
Run Code Online (Sandbox Code Playgroud)

最后一行的括号是令我困惑的部分.

你可能会说我对这门语言很陌生,所以它可能很简单,但我似乎无法找到与此相关的任何内容.

scala map

2
推荐指数
1
解决办法
109
查看次数