当前位置: 首页 > 知识库问答 >
问题:

Grails Spring Security静态规则

阎劲
2023-03-14

我希望在访问我的应用程序之前对所有用户进行身份验证。以下是配置中的设置。groovy:

grails.plugin.springsecurity.controllerAnnotations.staticRules=[
    "/**": ["ROLE_ADMIN"],
    "/login/auth": ["permitAll"]
]

我之所以放置“/登录/身份验证”:[“permitAll”],是因为任何用户都有机会登录并通过身份验证。但是,当我访问http://localhost:8080/myapp/,它重定向到http://localhost:8080/myapp/login/auth并抛出错误:页面没有正确重定向。你能告诉我我犯了什么错误吗?

共有3个答案

甘兴学
2023-03-14

Koloritnij的解决方案是正确的。但是,在使用SecurityConfigType时,它引发了以下错误。InterceptUrlMap:

ERROR: the 'securityConfigType' property must be one of
'Annotation', 'Requestmap', or 'InterceptUrlMap' or left unspecified
to default to 'Annotation'; setting value to 'Annotation'

我已将其更改为'InterceptUrlMap'只和它的工作:

grails.plugins.springsecurity.securityConfigType = 'InterceptUrlMap'
grails.plugins.springsecurity.interceptUrlMap = [
    "/login/auth": ["permitAll"],
    "/**": ["ROLE_ADMIN"]
]
澹台承载
2023-03-14

TrongBang和Koloritnij在正确的轨道上。但是他们在你的问题中并不完全正确。他们建议你切换到不同的身份验证设置。(这是可行的,但是它不能解决你设置中的问题。)

如果希望保留注释,则必须调用OAuth使用的控制器。

'/Spring Security OAuth<--pl hd--0/>允许所有']

插件映射了控制器路径,但静态规则仍然从中解释控制器和方法。我花了一些时间才找到答案。我也有同样的问题,我在博客上对此进行了讨论(其中包括一些关于Spring Security Oauth插件如何工作的细节)。

http://theexceptioncatcher.com/blog/2015/04/spring-security-oauth-the-missing-instructions/

钱均
2023-03-14

首先,您必须告诉Spring Security您将使用什么类型的映射。

grails.plugins.springsecurity.securityConfigType = 'InterceptUrlMap'

第二个“permitAll”更改为“IS\u AUTHENTICATED\u ANONYMOUSLY”,第三个是,如果spring security找到了另一个,他在这一行下没有看到另一个。因此,您的代码必须如下所示:

grails.plugins.springsecurity.securityConfigType = SecurityConfigType.InterceptUrlMap
grails.plugins.springsecurity.interceptUrlMap = [
"/login/auth": ["permitAll"],
 "/**": ["ROLE_ADMIN"]
]
 类似资料:
  • 问题内容: 我正在使用一些静态方法和字段进行保存状态序列化。我可能已经发誓,尽管序列化和static造成了混乱。我应该使所有静电瞬变吗?并扩大通话会恢复正常的静态吗? 问题答案: s是隐式的,因此您不需要这样声明它们。 序列化用于序列化 实例 ,而不是 类 。 字段(方法是不相关的,因为它们是类定义的一部分,所以它们不被序列化)将被重新初始化为加载类时它们设置的任何值。 如果您具有可变字段,则对该

  • 问题内容: 直到几周前,我还以为我知道何时创建字段和方法或。例如,当一个字段(例如另一个类的对象)对于该类的任意数量的对象是唯一的时,应将其设置为。 但是几周后,我读到了有关JVM垃圾收集的信息。 我知道字段永远不会被垃圾收集,并且始终保持在内存中,除非类加载器本身是垃圾收集的。 但是,如果我不创建该字段,至少它将被垃圾回收。 因此,在使字段/方法静态化与否之间似乎有一条 很细的界限 。 有人可以

  • 我最初有两个隐含的规则(为了清楚起见,简化了): 但问题是,在OS X和Linux上,是空白的,这导致规则匹配错误的东西。所以我尝试使用静态模式规则,如下所示: 其中是目标,因此没有扩展。但是现在,正在为以. cpp结尾的源运行顶级规则。我该如何解决这个问题? 有关完整示例: Makefile: 测试.cpp: 这会打印出错误:

  • 问题内容: 如标题所示,两者之间到底有什么区别 和 除了结构以外,还有什么重要区别吗? 问题答案: 对于您的示例,没有区别。但是如您所见, 只能接受一个表达式来初始化变量。但是,在静态初始化器(JLS 8.7)中,可以执行任意数量的语句。例如,可以这样做: 对于您的示例,显然不需要这样做,但是变量的初始化可能不仅仅使用表达式,甚至可能包含许多语句,因此Java制作了静态初始化器。

  • 问题内容: 只是为了澄清我正在考虑的这个权利,在Java中,静态字段是整个类使用的变量/字段,还是可以用于引用该类的所有对象?非静态字段是由对象定义的变量吗?并且与对象1引用相同类的第二个对象可以具有与对象1的静态字段不同的值吗? 问题答案: 与实例变量不同,在创建该类的实例之前,可以访问该类中的静态字段或静态类变量。在运行时创建该类的实例时,将创建该类中的实例变量(非静态变量)。因此,直到创建该

  • 我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?