问题列表 - 第33002页

使用Grails的Pre/Post Spring-Security注释

我正在使用Grails Spring-Security插件开发Grails(版本1.3.3)Web应用程序,Spring-Security-Core-1.0.1(反过来,它使用spring-security-3.0.2.RELEASE).

我想为控制器中的操作提供基于Spring-Security注释的访问控制.

我已经能够使用以下注释成功进行基本身份验证:

@Secured("hasAnyRole('ROLE_USER')")
def list = {
...  
}
Run Code Online (Sandbox Code Playgroud)

这样做 - 只向具有ROLE_USER角色的人提供对列表操作/视图的访问.

但是,允许执行某些控制器操作的角色集可能会随时间而变化,并且是系统整体状态的函数.也就是说,允许执行给定操作的角色集可能由服务或域对象方法返回.

我可以做这样的事情的一种方法是使用Spring-Security的"基于表达式的访问控制"(@Pre和@Post注释),类似于Spring Security Documentation中的示例:

 @PreAuthorize("hasPermission(#contact, 'admin')")
 public void deletePermission(Contact contact, Sid recipient, Permission permission);
Run Code Online (Sandbox Code Playgroud)

在用于访问控制决策的该示例中,可以使用#contact语法访问发送到该方法的对象(例如,联系人).

但是,我无法获得@PreAuthorize(或@RolesAllowed)注释来处理Grails控制器操作.如果我用@PreAuthorize(而不是@Secured,如上所述)注释列表操作,我会收到以下错误:

元素FIELD上不允许使用注释@ org.springframework.security.access.prepost.PreAuthorize

这并不奇怪 - 该操作是Groovy闭包(具有可执行代码的字段),而不是方法.但是,我也尝试使用从闭包中调用的方法的注释,如:

  def list = {
    testMethod()
    ....
  }

  @PreAuthorize("hasRole('ROLE_USER')")
  public boolean testMethod(){
    println "testMethod succeess"
    return true;
  }
Run Code Online (Sandbox Code Playgroud)

虽然这不会引发任何错误,但它似乎也没有提供任何访问控制.(无论用户是否具有ROLE_USER,都会打印"testMethod success").

所以,我尝试了一些不同的东西(并阅读了文档),但是还没有能够找到一种使用Grails控制器动作使用@PreAuthorize注释的好方法.这可能吗?在Grails应用程序中是否有更好的方法来使用Spring-Security-Annotations来提供访问控制,这是系统状态的一个功能?

grails spring-security

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

将标签存储在数据库中的最佳实践?

我开发了一个使用标签(关键词)的网站,以便对照片进行分类.现在,我在MySQL数据库中拥有的是一个具有以下结构的表:

image_id (int)
tag      (varchar(32))
Run Code Online (Sandbox Code Playgroud)

每当有人标记图像(如果标记有效并且有足够的投票),它就会被添加到数据库中.我认为这不是最佳的做事方式,因为现在我有5000个带标签的图像,标签表有超过40000个条目.我担心这会开始影响性能(如果它还没有影响它).

我认为这个其他结构认为获取与特定图像相关联的标签会更快,但是当我想要获取所有标签或者最常用的标签时,它看起来很糟糕:

image_id (int)
tags     (text) //comma delimited list of tags for the image
Run Code Online (Sandbox Code Playgroud)

有没有一种正确的方法可以做到这一点,或者两种方式都或多或少相同?思考?

mysql tags optimization performance structure

23
推荐指数
3
解决办法
3万
查看次数

如何将Java Hashtable转换为NSDictionary(obj-C)?

在服务器端(GAE),我有一个java Hashtable.

在客户端(iPhone),我正在尝试创建一个NSDictionary.

myHashTable.toString()让我看起来像[myDictionary描述]看起来很近 - 但并不完全相同.如果它们是相同的,我可以将字符串写入文件并执行:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:tmpFile];
Run Code Online (Sandbox Code Playgroud)

可以在obj-C中编写一个小解析器来处理myHashtable.toString(),但我有点希望有一个快捷方式已经内置到某个地方 - 我似乎无法找到它.

(所以,作为一个怪胎,我会花远远不再搜索网站的快捷方式比它会带我来写和调试分析器...;)

无论如何 - 提示?

谢谢!

java hashtable objective-c nsdictionary

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

如何让GWT DatePicker在星期一作为一周的第一天使用?

差不多,标题说的是什么.我需要使GWT DatePicker组件使用星期一作为一周的第一天.目前的标签是S M T W T F S,我希望它是M T W T F S S.有什么方法可以实现吗?

gwt date datepicker

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

Delphi - 使用户无需继承现有容器即可控制容器

我需要让一个控件成为一个控制器(在设计和运行时保持其他控件)类似于TPanel,而不继承自定义面板或类似的控件,我如何告诉我的控件它假设包含东西?

delphi delphi-2009

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

在unix中创建和绑定端口时出现问题.(网络编程新手)

我在Unix中创建端口时遇到了麻烦.这段代码不断返回"创建socket(3)的错误",这没有任何意义,因为sockfd必须小于0才能打印错误行.

server.c:

int main (int argc, char **argv)
{
  int sockfd;
  struct sockaddr_in server_sockaddr;
  char buff[TRANSFER_BUFFER_LEN];

  /* check number of command line arguments */
  if (argc < 2)
  {
    fprintf (stderr, "Usage: %s <port>\n");
    exit (EXIT_FAILURE);
  }

  /* create server socket */
  if ((sockfd = createUdpSocket (&sockfd,
                                 &server_sockaddr,
                                 atoi (*(argv + 1)))
      ) < 0);
  {
    fprintf (stderr, "Error creating socket (%d).\n", sockfd);
    exit (EXIT_FAILURE);
  }

  ...

return 0;
}
Run Code Online (Sandbox Code Playgroud)

socket_utils.h:

int createUdpSocket (int *sockfd, struct sockaddr_in *client_sockaddr, int port) …
Run Code Online (Sandbox Code Playgroud)

c unix network-programming

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

为什么这段代码过早退出?

    #include <stdio.h>
    #define MAX 5
    int stk[MAX];
    int top=-1;

    main() 
     {
      char ch;
      void push();
      void pop();
     void display();

     do
     {
      printf("1. Push\n");
      printf("2. Pop\n");
      printf("3. Display\n");
      ch=getchar();

         if(ch=='1')
            push();
         if(ch=='2')
            pop();
         if(ch=='3')
            display();

    printf("Do u want to continue y/n"); 
    ch=getchar();
       }while(ch=='y'||ch=='Y');

    }

void push()
 {
   }

void pop()
 {
   }

void display()
 {
   }
Run Code Online (Sandbox Code Playgroud)

我完成推送操作的那一刻...程序打印""你想继续y/n"并退出....不等待用户输入""y/Y"

请帮忙

c stack programming-languages

3
推荐指数
2
解决办法
217
查看次数

multipart/form-data中的' - '是什么?

我想问一个关于multipart/form数据的问题.我找到了multipart post的http头和Content-Type:multipart/form-data; 边界= -----...--- boundaryNumber.我想问一下,boundaryNumber和'='之间有多少' - '?

multipartform-data

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

自定义OS上的STL - std :: list可以工作,但std :: vector不能

我只是在visual studio 2010中使用grub-bootable C++内核.

我已经达到了新的和删除写入的地步,以及动态分配的数组等工作.例如,我可以使用STL列表.在我写了一个memcpy例程后,我甚至可以对它们进行排序.问题是当我使用std :: vector类型时.简单地构造向量将内核发送到la la land.

显然我错过了某种功能实现,但我通过STL搜索它并空手而归.它在push_back失败:

vector<int> v;
v.push_back(1);
Run Code Online (Sandbox Code Playgroud)

并消失在以太.

有什么猜测我错过了什么?

编辑是的它是int的向量.对困惑感到抱歉.不仅如此,它不是它失败的构造函数,它是对push_back的调用.

operating-system visual-studio-2010 stdvector visual-c++-2010

4
推荐指数
2
解决办法
310
查看次数

使用xpath从HTML文件中提取<title>的最安全的方法是什么?

这是我当前的xpath代码"/html/head/title".

但是你知道,在现实世界的html环​​境中,代码格式通常会被破坏,例如<html>标签丢失可能会导致异常.所以,我想知道是否有一种安全的方法来提取<title>标签?(类似于getElementByTagName)

html xpath

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