针对SpringSecurity中的@Order和SecurityProperties.ACCESS_OVERRIDE_ORDER与ManagementServerProperties.ACCESS_
针对Spring Security中的@Order和SecurityProperties.ACCESS_OVERRIDE_ORDER与ManagementServerProperties.ACCESS_OVERRIDE_ORDER这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展com.intellij.uiDesigner.propertyInspector.properties.BorderProperty的实例源码、com.intellij.uiDesigner.propertyInspector.properties.ClientPropertiesProperty的实例源码、com.intellij.uiDesigner.propertyInspector.properties.ClientPropertyProperty的实例源码、com.intellij.uiDesigner.propertyInspector.properties.IndentProperty的实例源码等相关知识,希望可以帮助到你。
本文目录一览:- Spring Security中的@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)与ManagementServerProperties.ACCESS_OVERRIDE_ORDER
- com.intellij.uiDesigner.propertyInspector.properties.BorderProperty的实例源码
- com.intellij.uiDesigner.propertyInspector.properties.ClientPropertiesProperty的实例源码
- com.intellij.uiDesigner.propertyInspector.properties.ClientPropertyProperty的实例源码
- com.intellij.uiDesigner.propertyInspector.properties.IndentProperty的实例源码
Spring Security中的@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)与ManagementServerProperties.ACCESS_OVERRIDE_ORDER
问题1: 在Spring Security中,确切的功能是什么
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
Spring文档陈述以下内容,但我不确定我是否清楚理解
要在不更改任何其他自动配置功能的情况下覆盖访问规则,请添加一个WebSecurityConfigurerAdapter类型的@Bean
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
。
根据我的理解,Spring Security中各种安全功能的顺序如下(最低值,即最高优先级到最高值,即最低优先级)
Ordered.HIGHEST_PRECEDENCE
= -2 ^ 31-1- WebSecurityConfigurerAdapter = 100(基于文档中提到的@Order(100))
Access_Override_Order = Basic_Auth_Order -2
用于 安全属性Access_Override_Order = Basic_Auth_Order -1
for ManagementServerPropertiesBasic_Auth_Order-2
= 2 ^ 31-7
Basic_Auth_Order = Ordered.Lowest_Precendence -5 = 2^31-5
Ordered.LOWEST_PRECEDENCE = 2^31
Question2 根据上述各种安全功能的顺序,如果我想覆盖管理端点和应用程序其余部分的默认规则,则应使用
- SecurityPropertiesACCESS_OVERRIDE_ORDER或
- ManagementServerProperties是否ACCESS_OVERRIDE_ORDER?
我目前正在使用,SecurityPropertiesACCESS_OVERRIDE_ORDER
但根据这里的建议 ,我需要启用ACTUATOR ManagementServerPropertiesACCESS_OVERRIDE_ORDER
。如果我两个都想工作,应该覆盖哪一个?
谢谢。
答案1
小编典典Q1。问题1:在Spring
Security中,注释的作用@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
是什么?
您引用的文档中对它的作用进行了很好的解释。
要在不更改任何其他自动配置功能的情况下覆盖访问规则,请添加一个WebSecurityConfigurerAdapter类型的@Bean
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
。
但是WebSecurityConfigurerAdapter
,具有的@Order(100)
优先级更高。
没有。
您应该对此部分小心autoconfiguredfeatures
。使用@EnableAutoConfiguration
,它是的一部分@SpringBootApplication
,很多东西是自动配置的,100
不是自动配置的值,而是类上的硬编码值WebSecurityConfigurerAdapter
。
您可以在SecurityProperties
类中找到用于自动配置Spring
Security的订单值,并且可以发现的值ACCESS_OVERRIDE_ORDER
最低,这意味着它具有最高优先级。
他们在哪里自动确认?
您可以找到@Order(SecurityProperties.BASIC_AUTH_ORDER)
在SpringBootWebSecurityConfiguration
课堂上使用的那个。
然后,当被注释@Order(100)
的WebSecurityConfigurerAdapter
使用呢?
例如,如果通过添加禁用自动配置@EnableWebSecurity
,则将使用该值。由于该值的100
优先级过高,因此最好@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
在您的自定义类中添加注释。
Q2。根据上述各种安全功能的顺序,如果我想覆盖管理端点和应用程序其余部分的默认规则,我应该使用什么
使用ManagementServerProperties ACCESS_OVERRIDE_ORDER
。
它具有更高的优先级,因此如果要覆盖所有端点的默认规则,则必须使用它。如果您打开ManagementServerProperties
类,则可以看到如何设置值。
在 SecurityProperties
int ACCESS_OVERRIDE_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 2; // 39int BASIC_AUTH_ORDER = Ordered.LOWEST_PRECEDENCE - 5; // 41
在 ManagementServerProperties
int BASIC_AUTH_ORDER = SecurityProperties.BASIC_AUTH_ORDER - 5; // 36int ACCESS_OVERRIDE_ORDER = ManagementServerProperties.BASIC_AUTH_ORDER - 1; // 35
在注释中,39
意味着21474839
,为了便于阅读,我省略了前6位数字。
com.intellij.uiDesigner.propertyInspector.properties.BorderProperty的实例源码
@NotNull @Override protected BorderProperty compute() { return new BorderProperty(null); }
private static boolean isPropertyDescriptor(final IProperty prop) { return !prop.getName().equals(BorderProperty.NAME) && !prop.getName().equals(RadTabbedPane.TAB_TITLE_PROPERTY) && !prop.getName().equals(RadTabbedPane.TAB_TOOLTIP_PROPERTY); }
@NotNull @Override protected BorderProperty compute() { return new BorderProperty(null); }
private static boolean isPropertyDescriptor(final IProperty prop) { return !prop.getName().equals(BorderProperty.NAME) && !prop.getName().equals(RadTabbedPane.TAB_TITLE_PROPERTY) && !prop.getName().equals(RadTabbedPane.TAB_TOOLTIP_PROPERTY); }
@NotNull @Override protected BorderProperty compute() { return new BorderProperty(null); }
private static boolean isPropertyDescriptor(final IProperty prop) { return !prop.getName().equals(BorderProperty.NAME) && !prop.getName().equals(RadTabbedPane.TAB_TITLE_PROPERTY) && !prop.getName().equals(RadTabbedPane.TAB_TOOLTIP_PROPERTY); }
com.intellij.uiDesigner.propertyInspector.properties.ClientPropertiesProperty的实例源码
private void writeClientProperties(final XmlWriter writer) { if (myModule == null) { return; } boolean haveClientProperties = false; try { ClientPropertiesProperty cpp = ClientPropertiesProperty.getInstance(getProject()); for (Property prop : cpp.getChildren(this)) { ClientPropertyProperty clientProp = (ClientPropertyProperty)prop; final Object value = getDelegee().getClientProperty(clientProp.getName()); if (value != null) { if (!haveClientProperties) { writer.startElement(UIFormXmlConstants.ELEMENT_CLIENT_PROPERTIES); haveClientProperties = true; } writer.startElement(clientProp.getName()); writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_CLASS,value.getClass().getName()); writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_VALUE,value.toString()); writer.endElement(); } } } finally { if (haveClientProperties) { writer.endElement(); } } }
private void writeClientProperties(final XmlWriter writer) { if (myModule == null) { return; } boolean haveClientProperties = false; try { ClientPropertiesProperty cpp = ClientPropertiesProperty.getInstance(getProject()); for (Property prop : cpp.getChildren(this)) { ClientPropertyProperty clientProp = (ClientPropertyProperty)prop; final Object value = getDelegee().getClientProperty(clientProp.getName()); if (value != null) { if (!haveClientProperties) { writer.startElement(UIFormXmlConstants.ELEMENT_CLIENT_PROPERTIES); haveClientProperties = true; } writer.startElement(clientProp.getName()); writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_CLASS,value.toString()); writer.endElement(); } } } finally { if (haveClientProperties) { writer.endElement(); } } }
private void writeClientProperties(final XmlWriter writer) { if (myModule == null) { return; } boolean haveClientProperties = false; try { ClientPropertiesProperty cpp = ClientPropertiesProperty.getInstance(getProject()); for (Property prop : cpp.getChildren(this)) { ClientPropertyProperty clientProp = (ClientPropertyProperty)prop; final Object value = getDelegee().getClientProperty(clientProp.getName()); if (value != null) { if (!haveClientProperties) { writer.startElement(UIFormXmlConstants.ELEMENT_CLIENT_PROPERTIES); haveClientProperties = true; } writer.startElement(clientProp.getName()); writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_CLASS,value.toString()); writer.endElement(); } } } finally { if (haveClientProperties) { writer.endElement(); } } }
com.intellij.uiDesigner.propertyInspector.properties.ClientPropertyProperty的实例源码
private void writeClientProperties(final XmlWriter writer) { if (myModule == null) { return; } boolean haveClientProperties = false; try { ClientPropertiesProperty cpp = ClientPropertiesProperty.getInstance(getProject()); for (Property prop : cpp.getChildren(this)) { ClientPropertyProperty clientProp = (ClientPropertyProperty)prop; final Object value = getDelegee().getClientProperty(clientProp.getName()); if (value != null) { if (!haveClientProperties) { writer.startElement(UIFormXmlConstants.ELEMENT_CLIENT_PROPERTIES); haveClientProperties = true; } writer.startElement(clientProp.getName()); writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_CLASS,value.getClass().getName()); writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_VALUE,value.toString()); writer.endElement(); } } } finally { if (haveClientProperties) { writer.endElement(); } } }
private void writeClientProperties(final XmlWriter writer) { if (myModule == null) { return; } boolean haveClientProperties = false; try { ClientPropertiesProperty cpp = ClientPropertiesProperty.getInstance(getProject()); for (Property prop : cpp.getChildren(this)) { ClientPropertyProperty clientProp = (ClientPropertyProperty)prop; final Object value = getDelegee().getClientProperty(clientProp.getName()); if (value != null) { if (!haveClientProperties) { writer.startElement(UIFormXmlConstants.ELEMENT_CLIENT_PROPERTIES); haveClientProperties = true; } writer.startElement(clientProp.getName()); writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_CLASS,value.toString()); writer.endElement(); } } } finally { if (haveClientProperties) { writer.endElement(); } } }
private void writeClientProperties(final XmlWriter writer) { if (myModule == null) { return; } boolean haveClientProperties = false; try { ClientPropertiesProperty cpp = ClientPropertiesProperty.getInstance(getProject()); for (Property prop : cpp.getChildren(this)) { ClientPropertyProperty clientProp = (ClientPropertyProperty)prop; final Object value = getDelegee().getClientProperty(clientProp.getName()); if (value != null) { if (!haveClientProperties) { writer.startElement(UIFormXmlConstants.ELEMENT_CLIENT_PROPERTIES); haveClientProperties = true; } writer.startElement(clientProp.getName()); writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_CLASS,value.toString()); writer.endElement(); } } } finally { if (haveClientProperties) { writer.endElement(); } } }
com.intellij.uiDesigner.propertyInspector.properties.IndentProperty的实例源码
protected void actionPerformed(final GuiEditor editor,final List<RadComponent> selection,final AnActionEvent e) { IndentProperty indentProperty = IndentProperty.getInstance(editor.getProject()); for(RadComponent c: selection) { int indent = indentProperty.getValue(c).intValue(); indentProperty.setValueEx(c,adjustIndent(indent)); } }
protected void actionPerformed(final GuiEditor editor,adjustIndent(indent)); } }
protected void actionPerformed(final GuiEditor editor,adjustIndent(indent)); } }
我们今天的关于Spring Security中的@Order和SecurityProperties.ACCESS_OVERRIDE_ORDER与ManagementServerProperties.ACCESS_OVERRIDE_ORDER的分享已经告一段落,感谢您的关注,如果您想了解更多关于com.intellij.uiDesigner.propertyInspector.properties.BorderProperty的实例源码、com.intellij.uiDesigner.propertyInspector.properties.ClientPropertiesProperty的实例源码、com.intellij.uiDesigner.propertyInspector.properties.ClientPropertyProperty的实例源码、com.intellij.uiDesigner.propertyInspector.properties.IndentProperty的实例源码的相关信息,请在本站查询。
本文标签: