小编dre*_*dre的帖子

Grails Spring Security(获取当前用户)

是否有过以下情况:

def user = User.get(springSecurityService.principal.id)
Run Code Online (Sandbox Code Playgroud)

过度

def user = springSecurityService.currentUser
Run Code Online (Sandbox Code Playgroud)

我能想到的是阻止懒惰或确保您当前正在操作的数据不是陈旧的?

grails spring-security

12
推荐指数
2
解决办法
2万
查看次数

Grails - 有没有推荐的方法来处理AJAX表单中的CSRF攻击?

我正在使用同步器令牌模式用于标准表单(useToken = true)但我找不到任何推荐的方法来处理这个通过AJAX.

编辑

自从发布这个以来,我已经推出了我自己的解决方案,其中包含了Grails现有模式.

在jQuery ajax中,我发布了整个表单(包括Grails的注入SYNCHRONIZER_TOKEN和SYNCHRONIZER_URI隐藏字段),以便withForm闭包可以在控制器中按预期执行.

问题是,成功响应后,没有新的令牌集(因为页面没有重新加载,并且没有引发g:form taglib)所以我在控制器中手动执行此操作,调用与g:form相同的库taglib,并在ajax响应中返回它,然后重置隐藏的字段值.见下文:

var formData = jQuery("form[name=userform]").serializeArray();

$.ajax({
    type: 'POST',
    url: 'delete',
    data: formData,
    success: function (data) {
        // do stuff
    },
    complete: function (data) {
        // Reset the token on complete
        $("#SYNCHRONIZER_TOKEN").val(data.newToken);
    }
})
Run Code Online (Sandbox Code Playgroud)

在控制器中:

def delete(String selectedCommonName) {

    def messages = [:]
    withForm {
        User user = User.findByName(name)

        if (user) {
            userService.delete(user)
            messages.info = message(code: 'user.deleted.text')

        } else {
            messages.error = message(code: 'user.notdeleted.text')
        }
    }.invalidToken {
            messages.error = message(code: 'no.duplicate.submissions')
    }
    // …
Run Code Online (Sandbox Code Playgroud)

security grails csrf

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

Grails:两个域对象之间的多个关系

我试图在Grails中的两个域类之间实现两种不同类型的关系.

考虑以下; 我有两个域类,一个作者和书类,作者有很多书.

class Author{           
   String name 
}

class Book{
   String title
   static belongsTo = [author:Author]

}
Run Code Online (Sandbox Code Playgroud)

以上描述了作者和书之间非常基本的一对多关系.但我也希望作者有一个喜欢的书籍列表的概念.理想情况下,这将表示为单独的一对多关系,将同一Book对象描述为列表并保持原样.

class Author{          
   String name
   static hasMany = [favouriteBooks: Book]

   static mapping = {
        favouriteBooks joinTable: [name: 'favourite_books',
                key: 'author_id']
   }
}

class Book{
   String title
   static belongsTo = [client:Client]

}
Run Code Online (Sandbox Code Playgroud)

我试图像上面那样描述这个(在许多其他方法中)并且最终没有创建数据库表(favourite_books).我没有得到任何错误.这是我能想到的唯一方法,不使用任何额外的对象,我希望避免使模型保持简单.我觉得我走在正确的轨道上,但也许错过了一些重要的拼图.

任何帮助将非常感激.

grails grails-orm

5
推荐指数
2
解决办法
4836
查看次数

Java中的逻辑的二传手

考虑一下Java中的Message对象,该对象存储一些文本。

public class Message {

    private String text;
    private boolean containsDigit;

    public Message() {
        //constructor
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public boolean isContainsDigit() {
        return containsDigit;
    }

}
Run Code Online (Sandbox Code Playgroud)

这是一个持久的对象。

我在构造函数中设置数据没有问题,但是可以在创建对象之后设置消息的文本字段,并且在设置文本时,此后还可以对containsDigit字段进行查询。显而易见的方法是在设置器中:

public void setText(String text) {
     // presume existence of method to check for digit
     if(text.containsDigit())
         this.containsDigit = true;

     this.text = text;
}
Run Code Online (Sandbox Code Playgroud)

但这是否会由于setter方法中的逻辑而导致任何“最佳实践”警报响起?

有人会建议替代实施吗?

编辑

我可能应该补充一点,该containsDigit字段是必需的,因为该对象是持久性的,因此containsDigit可以随后查询该字段。另外,在使用Spring / Hibernate引擎的应用程序中,在重新读取/写入对象时会不断调用此setter,因此也想知道这样做的实用性/效率。

java oop setter getter-setter

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

慢MySql查询:检查和建议复合索引的工具

我有一个连接多个表的查询,这些表的性能很差,因此我使用试错法创建复合索引,尝试根据我正在过滤的列来改善性能,但是我没有得到所需的结果.我正在使用EXPLAIN计划来尝试确定合适的索引策略.

任何人都可以提出另一种可以帮助解决此问题的工

mysql performance composite-index

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

如何使用标记实现响应式地图图像

我有以下代码显示带有绝对定位标记的地图。它运行良好,但我有一个新的要求,即响应屏幕尺寸的变化(移动优化)。

是否有可能实现这一点,以便标记调整到正确的位置,在这种情况下是在阿拉斯加和格陵兰,随着屏幕调整大小(水平)。

.map-marker {
    position: absolute;
    font-size: 20px;
    text-shadow: 1px 1px 1px #000;
    text-decoration:none;
  }
  .map-marker span {
    position:relative;
    z-index: 2;
    color:#fff;
  }
  .map-marker:before {
    content: "\f111";
    font-family: 'FontAwesome';
    position: relative;
    right: -14px;
    z-index: 0;
  }
  #one {
    top: 70px;
    left: 20px;
  }

  #two {
    top: 50px;
    left: 260px;
  }
Run Code Online (Sandbox Code Playgroud)
<link href="https://netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" />
<div class="map_container">
  <img src="http://geology.com/world/world-map-clickable.gif" />
  <a href="#" id="one" class="map-marker">
    <span aria-hidden="true">1</span>
  </a>
  <a href="#" id="two" class="map-marker">
    <span aria-hidden="true">2</span>
  </a>
</div>
Run Code Online (Sandbox Code Playgroud)

html css responsive-design

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

Grails 4:数据库迁移插件问题

由于升级到 Grails 4,迁移脚本似乎没有从它们的配置位置加载。这会导致以下错误;

liquibase.exception.ChangeLogParseException:java.lang.IllegalArgumentException:要编译的脚本文本不能为空!

到目前为止,我只在 gradle config 上指定了位置;

sourceSets {
    main {
        resources {
            srcDir 'grails-app/migrations'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经添加了插件提供的附加配置,但无济于事;

grails.plugin.databasemigration.changelogLocation = 'grails-app/migrations'
Run Code Online (Sandbox Code Playgroud)

通过调试,我可以看到grails-app/migrations路径似乎没有添加到位置列表中,但也发现了grails-app/conf,所以我暂时将它们全部放在那里,瞧...应用程序启动了。

有人知道这是插件的已知问题还是缺少配置?

grails database-migration liquibase grails-4

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

Spock - 近似比较

我一直在寻找与JUnit中的以下便捷方法相当的Spock,您可以进行"近似"比较.有谁知道这样的事情是否存在?

/**
 * Asserts that two doubles or floats are equal to within a positive delta.
 */
assertEquals(double expected, double actual, double delta) 
Run Code Online (Sandbox Code Playgroud)

grails junit spock

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