小编ang*_*yip的帖子

Grails UrlMapping重定向以保持DRY

我正在使用Grails 2.1.1并希望添加一些映射到Controller Actions的自定义URL.

我可以这样做,但原始的映射仍然有效.

例如,我add-property-to-directory在my中创建了一个映射,UrlMappings如下所示:

class UrlMappings {

    static mappings = {
        "/add-property-to-directory"(controller: "property", action: "create")
        "/$controller/$action?/$id?"{
            constraints {
                // apply constraints here
            }
        }

        "/"(view:"/index")
        "500"(view:'/error')
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,正如我所料,我可以击中/mysite/add-property-to-directory并执行它PropertyController.create.

但是,我仍然可以击中/mysite/property/create它,它将执行相同的PropertyController.create方法.

在干燥的精神,我想从做301重定向/mysite/property/create/mysite/add-property-to-directory.

我找不到办法做到这一点UrlMappings.groovy.有谁知道我可以在Grails中实现这一目标的方式?

非常感谢你!

UPDATE

根据Tom的回答,这是我实施的解决方案:

UrlMappings.groovy

class UrlMappings {

    static mappings = {

        "/add-property-to-directory"(controller: "property", action: "create")
        "/property/create" {
            controller = "redirect"
            destination = "/add-property-to-directory"
        }


        "/$controller/$action?/$id?"{
            constraints { …
Run Code Online (Sandbox Code Playgroud)

grails grails-2.0

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

泽西多重生产

我在这里遵循球衣教程,以弄清楚如何产生多个mime输出.从他们的网站,这是推荐的方式:

@GET
@Produces({"application/xml", "application/json"})
    public String doGetAsXmlOrJson() {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是如何抽象@Produces,以便我的代码更欢迎它可以产生的其他mime类型.比方说,我有500个方法都有这个注释:

@Produces({"application/xml", "application/json"})
Run Code Online (Sandbox Code Playgroud)

如果我要求将kml添加为mime类型,则编辑和替换所有这些值肯定会非常耗时.

@Produces({"application/xml", "application/json", "application/kml"})
Run Code Online (Sandbox Code Playgroud)

是否有可能更有效地构建@Produces,以便我不会遇到这个问题?

java jax-rs jersey

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

TypeScript中的Hashset

我试图在TypeScript中做一些非常基本的事情.在解析本文中引用的地图时获取唯一字符串列表.

这是我试图做的事情:

let myData = new Array<string>();
for (let myObj of this.getAllData()) {
    let name = myObj.name;
    console.log("## we have " + name);
    console.log("### is property ? " + myData.hasOwnProperty(name));
    if (!myData.hasOwnProperty(name)){
        myData.push(name);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于任何字符串,我的打印输出将始终评估为false,重复或不重复.这是一些示例输出:

 ## we have COW
 ### is property ? false
 ## we have COW
 ### is property ? false
 ## we have RAODN
 ### is property ? false
 ## we have COOL
 ### is property ? false
Run Code Online (Sandbox Code Playgroud)

但是,当该过程完成时,我的列表包含重复项.我试过看过这个文档,但是没有提到'hashset'或者一般的任何集合.

Set的TypeScript中是否有相同的东西?即一系列独特元素

typescript angular

7
推荐指数
1
解决办法
1万
查看次数

在Swift 5中配置核心数据持久性

我正在使用以下教程将Core Data实现到我的Swift IOS应用程序中。如视频所示,我的持久性管理器是通过单例模式创建的。这是描述它的代码:

import Foundation
import CoreData

class DataLogger {

    private init() {}
    static let shared = DataLogger()
    lazy var context = persistentContainer.viewContext

    private var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "mycoolcontainer")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                print("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()

    func save () {
        if self.context.hasChanges {
            self.context.perform {
                do {
                    try self.context.save()
                } catch {
                    print("Failure to save context: \(error)")
                } …
Run Code Online (Sandbox Code Playgroud)

core-data ios swift

7
推荐指数
2
解决办法
520
查看次数

从Swift 4调用C函数

我已经使用codegen工具从MATLAB生成了C代码。该功能可以描述如下:

function [result] = calculate_data(my_matrix)
    for idx = 1:length(my_matrix)
        result = result + sum(my_matrix(idx,1:3));
    end
end
Run Code Online (Sandbox Code Playgroud)

使用codegen工具时,我明确声明my_matrix是double(:inf,3)的类型。换句话说,行数是无限制的,但是它将有3列。生成代码时,这是我要执行的生成的函数:

calculate_data(my_matrix : UnsafePointer<emxArray_real_T>!, result : UnsafeMutablePointer<emxArray_real_T>!)
Run Code Online (Sandbox Code Playgroud)

在不同的c文件中,emxArray_real_T的定义如下:

struct emxArray_real_T
{
  double *data;
  int *size;
  int allocatedSize;
  int numDimensions;
  boolean_T canFreeData;
};
Run Code Online (Sandbox Code Playgroud)

当我看到上述类的初始化选项时,这一点特别有意义:

emxArray_real_T.init(data: UnsafeMutablePointer<Double>!, size: UnsafeMutablePointer<Int32>!, allocatedSize: Int32, numDimensions: Int32, canFreeData: boolean_T)
Run Code Online (Sandbox Code Playgroud)

我试图遵循本文档作为将我的头缠在如何调用生成的C代码上的一种方法,但是我认为我可能缺少一个基本步骤。这是我在做什么:

// create an 2d array with some fake data
var mySampleData = [[Double]]();
for i in 0 ..< 3 {
    mySampleData.append([1.1, 2.2, 3.3]);
}

// begin fulfilling requirements …
Run Code Online (Sandbox Code Playgroud)

c matlab swift

6
推荐指数
1
解决办法
213
查看次数

在systemd中执行jar文件时强制工作目录

我试图在Linux中从systemd服务启动一个jar.我正在执行的jar假定在当前目录中有一个xml文件.我使用-config参数传递该文件的名称.我创建的示例服务如下:

[Unit] Description=my service After=network.target

[Service] Type=simple Environment="xml_file_name=sample.xml" ExecStart=/usr/bin/java -jar /path/to/jar/myapp.jar -config ${xml_file_name}

上面的服务文件放在/ usr/lib/systemd/system目录中,名为myservice.service.我正在执行以下命令来启动它:

systemctl daemon-reload systemctl stop myservice.service systemctl start myservice.service systemctl status myservice.service

systemctl status myservice.service命令显示jar文件已运行,但我的应用程序说它无法找到$ {xml_file_name}.

另外,我的jar声明它是从/目录执行的.我认为这是问题的一部分,因为$ {xml_file_name}仅适用于/ path/to/jar /目录.

事情尝试:

  • -Xbootclasspath/p:"/path/to/jar/":预先添加jar位置的路径,以便可以看到$ {xml_file_name}.

  • 将/ path /更改为/ jar /以确保它已启用所有可能的权限

  • 我尝试User=root[Service]我的systemd服务部分添加,但它没有改变.无论哪种方式,只有root用户在计算机上,并且权限似乎都检查出来.

是什么让这更奇怪的是,如果我cd到/,然后手动执行:

/usr/bin/java -jar /path/to/jar/myapp.jar -config sample.xml

一切话都很好.

有什么明显的东西我在这里不见了吗?是否有可能告诉systemd服务,执行这个java jar,但确保工作路径/path/to/jar//?相反?

java linux daemon init systemd

5
推荐指数
1
解决办法
8468
查看次数

在WebStorm中禁用“文件缓存冲突”对话框

我正在开发Angular 2应用程序。每次执行保存时,WebStorm都会提示我加载更改。每次我对TypeScript文件进行更改时,它都会成为一个相当繁琐的问题。这是这种疯狂的照片:

在此处输入图片说明

我一生都无法在IDE中找到可点击的位置来设置默认选项。有没有人遇到过这个问题,如果是这样,您如何解决?

WebStorm 2016.2.3
内部版本#WS-162.1812.21

webstorm

5
推荐指数
0
解决办法
1995
查看次数

解析时间戳时,时区重要吗?

我有一个时间戳编码为String-例如,"2012-02-12T09:08:13.123456-0400"来自Oracle数据库。

我可以想到的唯一读取此时间戳的方法是使用Timestamp.valueOf(),并且需要一种格式yyyy-[m]m-[d]d hh:mm:ss[.f...]

我坚信这是在不损失精度的情况下读取时间的唯一方法,因为其他方法不支持上述示例中包含的纳秒精度".123456"

考虑到这一点,我可以简单地修剪所需的值以适合所需的格式。因此,原始字符串将被转换:

  • 之前: "2012-02-12T09:08:13.123456-0400"
  • 后: "2012-02-12 09:08:13.123456"

如果这样做,我将删除"-0400"时区偏移量。这对我来说是一个危险的信号,直到我看到这篇文章为止。提出的答案之一指出,

我认为正确答案应该是java.sql.Timestamp不是特定于时区的。时间戳是java.util.Date和单独的纳秒值的组合。此类中没有时区信息。因此,就像Date一样,该类仅保留自1970年1月1日00:00:00 GMT + nanos起的毫秒数。

为了向我证明不需要偏移量,我编写了一个简单的集成测试。

将此时间戳插入数据库:中"2015-09-08 11:11:12.123457"。使用Java读取数据库,并打印出详细信息。我得到"2015-09-08 11:11:12.123457",这是相同的值。因为我的JVM和Oracle DB在同一台计算机上运行,​​所以这没问题。

  1. 时区不是因素java.sql.Timestamp吗?
  2. 有没有更好的方法来读取整个时间戳,而又不损失Java 7的任何精度?

java java-7

5
推荐指数
1
解决办法
1583
查看次数

mac osx bigsur 上的 opencv 性能下降

我正在使用 Python 2.7.1 通过 python 在 MAC OSX BigSur 11.0.1 ( i9 intel ) 上运行 opencv。在我的 mac 上运行的最后一个稳定实现是 opencv-python 4.1.2.30 。自从更新 BigSur 以来,我注意到以下 opencv 函数的性能显着降低:

cv2.waitKey(1)
Run Code Online (Sandbox Code Playgroud)

这是我播放视频的整个脚本。注意:视频是以 130FPS 拍摄的。

import cv2
import sys
import time

video = "myvideo.mp4"

view_name = "my_video"
cv2.namedWindow(view_name)
cv2.moveWindow(view_name,250,150)

cap = cv2.VideoCapture(video)
tots = cap.get(cv2.CAP_PROP_FRAME_COUNT)
i = 0
cv2.createTrackbar('S',view_name, 0,int(tots)-1, lambda x:x)
cv2.setTrackbarPos('S',view_name,0)

status = 'pause'
previous_status = 'pause'

while True:
  try:
    if i==tots-1:
      i=0
    cap.set(cv2.CAP_PROP_POS_FRAMES, i)
    #start = time.time()
    ret, im = cap.read()
    cv2.imshow(view_name, im) …
Run Code Online (Sandbox Code Playgroud)

python macos opencv

5
推荐指数
0
解决办法
493
查看次数

Java Web 应用程序的智能卡身份验证在哪里进行?

我对试图确定 CAC/Active Directory(AD) 身份验证在基于 Java 的 Web 应用程序中发挥作用的位置感到相当困惑。以多个 Weblogic 容器上托管的多个 J2E JSF 应用程序为例。这些应用程序中的每一个都通过检查用户所处的 AD 角色来限制用户的访问。如果所有这些应用程序都需要 CAC/AD 身份验证,那么在什么阶段执行 CAC/AD 身份验证?

据我了解,理想情况下,您需要一个与执行身份验证的应用程序分开的网关。一个简单的例子是 F5 硬件/软件捆绑包。一旦用户使用其 CAC/pin 组合进行身份验证,它们就会被转发到 Weblogic 上部署的应用程序,并在其标头中包含一些附加信息(如前面提到的 AD 角色)。我并不是说我应该购买它,因为没有可编程解决方案,而是作为一个例子,身份验证和使用的资源是两个独立的实体,并且不必针对此问题将其组合起来。

然而,在实践中,我了解到许多项目正在结合 Microsoft 和 Apache 服务来允许身份验证。这是一篇很好的博客文章,概述了一些好处。一旦用户通过 IIS 身份验证,他们就会被转发到 apache 上的应用程序。无论如何,混合使用 IIS 和 Weblogic 似乎是一个坏主意,尤其是在尝试配置两个节点之间的通信时。

堆栈和网络上也有许多可以追溯到 2012 年之前的帖子,其中推荐了不同的解决方案。一篇文章建议如下:

当服务器验证客户端证书时,您可以指定一组可接受的证书策略

虽然答案总体上是有道理的,但作者从未深入探讨进行这种交流的架构细节。其他一些帖子推荐JOSSO来执行 SSO 功能,如前面提到的网关机制。这篇文章还讨论了使用PKCS11通过使用制造商提供的驱动程序直接读取智能卡。还有一些问题没有答案,例如Authenticating AD server user using DOD Issued CAC in java

考虑到其中一些帖子的平均间隔时间为 5 年,我不确定今天解决此问题的最佳实践是什么。网关方法是进行身份验证的理想方法吗?我的想法根本不适用并且存在更好的解决方案吗?

java authentication josso smartcard cac

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