Spring Security Appendix

阅读:405 2019-03-19 14:44:35 来源:新网

1.安全数据库架构框架使用了各种数据库模式,本附录为它们提供了一个参考点。您只需要提供所需功能区域的表格。

给出了hsqldb数据库的ddl语句。您可以使用这些作为定义正在使用的数据库的架构的指导。

1.1。用户架构userdetailsservice(jdbcdaoimpl)的标准jdbc实现要求表加载密码,帐户状态(启用或禁用)以及用户权限列表(角色)。您将需要调整此模式以匹配您正在使用的数据库方言。

createtableusers(usernamevarchar_ignorecase(50)notnullprimarykey,passwordvarchar_ignorecase(50)notnull,enabledbooleannotnull);createtableauthorities(usernamevarchar_ignorecase(50)notnull,authorityvarchar_ignorecase(50)notnull,constraintfk_authorities_usersforeignkey(username)referencesusers(username));createuniqueindexix_auth_usernameonauthorities(username,authority);

1.1.1。集团主管部门springsecurity2.0引入了对jdbcdaoimpl中的组管理员的支持。如果组启用,表结构如下。您将需要调整此模式以匹配您正在使用的数据库方言。

createtablegroups(idbigintgeneratedbydefaultasidentity(startwith0)primarykey,group_namevarchar_ignorecase(50)notnull);createtablegroup_authorities(group_idbigintnotnull,authorityvarchar(50)notnull,constraintfk_group_authorities_groupforeignkey(group_id)referencesgroups(id));createtablegroup_members(idbigintgeneratedbydefaultasidentity(startwith0)primarykey,usernamevarchar(50)notnull,group_idbigintnotnull,constraintfk_group_members_groupforeignkey(group_id)referencesgroups(id));

请记住,只有在使用提供的jdbcuserdetailsservice实现时,才需要这些表。如果您自己编写或选择在没有userdetailsservice的情况下实施authenticationprovider,则只要符合接口合同,就可以完全自由地存储数据。

1.2。持久登录(记住我)模式此表用于存储由更安全的持久令牌remember-me实现使用的数据。如果您直接或通过命名空间使用jdbctokenrepositoryimpl,那么您将需要此表。请记住调整此模式以匹配您正在使用的数据库方言。

createtablepersistent_logins(usernamevarchar(64)notnull,seriesvarchar(64)primarykey,tokenvarchar(64)notnull,last_usedtimestampnotnull);

1.3。acl模式springsecurityacl使用了四个表。

假设数据库将自动生成每个身份的主键。当它在acl_sid或acl_class表中创建一个新行时,jdbcmutableaclservice必须能够检索这些。它有两个属性定义了检索这些值classidentityquery和sididentityquery所需的sql。这两个默认调用identity()

acl工件jar包含用于在hypersql(hsqldb),postgresql,mysql/mariadb,microsoftsqlserver和oracle数据库中创建acl模式的文件。这些模式也在以下部分中演示。

mysql

createtableacl_sid(idbigintunsignednotnullauto_incrementprimarykey,principalbooleannotnull,sidvarchar(100)notnull,uniquekeyunique_acl_sid(sid,principal))engine=innodb;createtableacl_class(idbigintunsignednotnullauto_incrementprimarykey,classvarchar(100)notnull,uniquekeyuk_acl_class(class))engine=innodb;createtableacl_object_identity(idbigintunsignednotnullauto_incrementprimarykey,object_id_classbigintunsignednotnull,object_id_identitybigintnotnull,parent_objectbigintunsigned,owner_sidbigintunsigned,entries_inheritingbooleannotnull,uniquekeyuk_acl_object_identity(object_id_class,object_id_identity),constraintfk_acl_object_identity_parentforeignkey(parent_object)referencesacl_object_identity(id),constraintfk_acl_object_identity_classforeignkey(object_id_class)referencesacl_class(id),constraintfk_acl_object_identity_ownerforeignkey(owner_sid)referencesacl_sid(id))engine=innodb;createtableacl_entry(idbigintunsignednotnullauto_incrementprimarykey,acl_object_identitybigintunsignednotnull,ace_orderintegernotnull,sidbigintunsignednotnull,maskintegerunsignednotnull,grantingbooleannotnull,audit_successbooleannotnull,audit_failurebooleannotnull,uniquekeyunique_acl_entry(acl_object_identity,ace_order),constraintfk_acl_entry_objectforeignkey(acl_object_identity)referencesacl_object_identity(id),constraintfk_acl_entry_aclforeignkey(sid)referencesacl_sid(id))engine=innodb;

oracle

createtableacl_sid(idnumber(38)notnullprimarykey,principalnumber(1)notnullcheck(principalin(0,1)),sidnvarchar2(100)notnull,constraintunique_acl_sidunique(sid,principal));createsequenceacl_sid_sequencestartwith1incrementby1nomaxvalue;createorreplacetriggeracl_sid_id_triggerbeforeinsertonacl_sidforeachrowbeginselectacl_sid_sequence.nextvalinto:new.idfromdual;end;createtableacl_class(idnumber(38)notnullprimarykey,classnvarchar2(100)notnull,constraintuk_acl_classunique(class));createsequenceacl_class_sequencestartwith1incrementby1nomaxvalue;createorreplacetriggeracl_class_id_triggerbeforeinsertonacl_classforeachrowbeginselectacl_class_sequence.nextvalinto:new.idfromdual;end;createtableacl_object_identity(idnumber(38)notnullprimarykey,object_id_classnumber(38)notnull,object_id_identitynumber(38)notnull,parent_objectnumber(38),owner_sidnumber(38),entries_inheritingnumber(1)notnullcheck(entries_inheritingin(0,1)),constraintuk_acl_object_identityunique(object_id_class,object_id_identity),constraintfk_acl_object_identity_parentforeignkey(parent_object)referencesacl_object_identity(id),constraintfk_acl_object_identity_classforeignkey(object_id_class)referencesacl_class(id),constraintfk_acl_object_identity_ownerforeignkey(owner_sid)referencesacl_sid(id));createsequenceacl_object_identity_sequencestartwith1incrementby1nomaxvalue;createorreplacetriggeracl_object_identity_id_triggerbeforeinsertonacl_object_identityforeachrowbeginselectacl_object_identity_sequence.nextvalinto:new.idfromdual;end;createtableacl_entry(idnumber(38)notnullprimarykey,acl_object_identitynumber(38)notnull,ace_orderintegernotnull,sidnumber(38)notnull,maskintegernotnull,grantingnumber(1)notnullcheck(grantingin(0,1)),audit_successnumber(1)notnullcheck(audit_successin(0,1)),audit_failurenumber(1)notnullcheck(audit_failurein(0,1)),constraintunique_acl_entryunique(acl_object_identity,ace_order),constraintfk_acl_entry_objectforeignkey(acl_object_identity)referencesacl_object_identity(id),constraintfk_acl_entry_aclforeignkey(sid)referencesacl_sid(id));createsequenceacl_entry_sequencestartwith1incrementby1nomaxvalue;createorreplacetriggeracl_entry_id_triggerbeforeinsertonacl_entryforeachrowbeginselectacl_entry_sequence.nextvalinto:new.idfromdual;end;

2.安全名称空间本附录提供了对安全命名空间中可用的元素的引用以及它们创建的基础bean的信息(假设各个类的知识以及它们如何协同工作)-您可以在本文档中的javadoc和其他地方找到更多信息)。如果以前没有使用命名空间,请阅读命名空间配置的入门章节,因为这是为了补充信息。建议在编辑基于模式的配置时使用高质量的xml编辑器,因为这将提供有关哪些元素和属性可用的上下文信息以及解释其目的的注释。命名空间以relaxngcompact格式编写,后来转换为xsd模式。如果您熟悉此格式,则可能希望直接检查模式文件。

2.1。web应用程序安全2.1.1。启用s​​pringsecurity调试基础架构。这将提供可读(多行)调试信息来监视进入安全过滤器的请求。这可能包括敏感信息,例如请求参数或标头,并且只能在开发环境中使用。

2.1.2。如果在应用程序中使用元素,则会创建一个名为“springsecurityfilterchain”的filterchainproxybean,并使用该元素内的配置在filterchainproxy中构建一个过滤器链。从springsecurity3.1开始,可以使用其他http元素来添加额外的过滤器链[24]。一些核心过滤器总是在过滤器链中创建,其他核心过滤器将根据存在的属性和子元素添加到堆栈中。标准过滤器的位置是固定的(请参阅命名空间介绍中的过滤器顺序表),当用户必须在filterchainproxybean中显式配置过滤器链时,删除与以前版本的框架的常见错误源。当然,如果您需要完全控制配置,您可以继续执行此操作。

需要引用authenticationmanager的所有过滤器将自动注入由命名空间配置创建的内部实例(有关authenticationmanager的更多信息,请参阅介绍章节)。

每个命名空间块总是创建一个securitycontextpersistencefilter,一个exceptiontranslationfilter和一个filtersecurityinterceptor。这些是固定的,不能替代替代品。

属性

元素上的属性控制核心筛选器上的某些属性。

childelementsof

access-denied-handler

anonymous

csrf

custom-filter

expression-handler

form-login

headers

http-basic

intercept-url

jee

logout

openid-login

port-mappings

remember-me

request-cache

session-management

2.1.3。此元素允许您为exceptiontranslationfilter使用的默认accessdeniedhandler设置errorpage属性,使用error-page属性,或使用theref属性提供自己的实现。这在exceptiontranslationfilter的一节中有更详细的讨论。

的父元素

http

属性

2.1.4。此元素允许配置要与响应一起发送的附加(安全)标头。它可以轻松配置几个标题,并允许通过标题元素设置自定义标头。附加信息可以在参考的安全性头部分找到。

的父元素

http

的子元素

cache-control

content-type-options

frame-options

header

hsts

2.1.5。添加cache-control,pragma和expires标头,以确保浏览器不缓存您的安全页面。

的父元素

headers

2.1.6。启用时,将strict-transport-security标头添加到任何安全请求的响应。这允许服务器指示浏览器自动使用https以备将来的请求。

属性

的父元素

2.1.7。<帧选项>启用时,将x-frame-options头添加到响应中,这样可以让较新的浏览器进行一些安全检查并防止劫持攻击。

属性

...

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服