xml自定义实体

自定义实体分为:一般实体和参数实体

1、自定义一般实体

demo8中的代码:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (detail+)>
<!ELEMENT detail (name,author,publisher,price,url)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT url (#PCDATA)>

<!ENTITY bj "北京大学出版社">

对应的xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "demo8.dtd">
<book>
	<detail>
		<name>XML</name>
		<author>李白</author>
		<publisher>&bj;</publisher>
		<price>22.5</price>
		<url>
			<![CDATA[
				<a href="#">链接1</a>
			]]>
		</url>
	</detail>
	<detail>
		<name>PHP</name>
		<author>杜甫</author>
		<publisher>&bj;</publisher>
		<price>22.5</price>
		<url>
			<![CDATA[
				<a href="#">链接2</a>
			]]>
		</url>
	</detail>
</book>

xml内部定义一般实体:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "demo8.dtd"[
	<!ENTITY bj "北京大学出版社">
]>
<book>
	<detail>
		<name>XML</name>
		<author>李白</author>
		<publisher>&bj;</publisher>
		<price>22.5</price>
		<url>
			<![CDATA[
				<a href="#">链接1</a>
			]]>
		</url>
	</detail>
	<detail>
		<name>PHP</name>
		<author>杜甫</author>
		<publisher>&bj;</publisher>
		<price>22.5</price>
		<url>
			<![CDATA[
				<a href="#">链接2</a>
			]]>
		</url>
	</detail>
</book>


2、自定义参数实体

参数实体就是在普通实体名字前面加上%”。

dtd中的代码:

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % p "test"> <!-- 先声明后使用 -->
<!ELEMENT roster ((%p;)+)>
<!ELEMENT %p; (name, sex, birthday, score?, skill+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT birthday (#PCDATA)>
<!ELEMENT score (#PCDATA)>
<!ELEMENT skill (#PCDATA)>
<!ATTLIST %p; id ID #REQUIRED>

对应的xml代码:

demo1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE roster  SYSTEM "demo11.dtd"[
	<!ENTITY % p "teacher">  <!-- 给参数赋值 -->
]>
<roster>
	<teacher id="s">
		<name></name>
		<sex></sex>
		<birthday></birthday>
		<skill></skill>
	</teacher>
</roster>

demo2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE roster SYSTEM "demo11.dtd"[
	<!ENTITY % p "student"> <!-- 给参数赋值 -->
]>
<roster>
	<student id="s">
		<name></name>
		<sex></sex>
		<birthday></birthday>
		<skill></skill>
	</student>
</roster>


在 Spring Security 中,可以通过实现 PermissionEvaluator 接口来自定义权限验证逻辑。 首先,需要在配置文件中开启自定义 PermissionEvaluator 的支持: ```xml <beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler"> <beans:property name="permissionEvaluator" ref="customPermissionEvaluator" /> </beans:bean> <beans:bean id="customPermissionEvaluator" class="com.example.CustomPermissionEvaluator" /> ``` 接下来,实现 PermissionEvaluator 接口的 evaluate 方法: ```java public class CustomPermissionEvaluator implements PermissionEvaluator { @Override public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) { // 在此处编写自定义的权限验证逻辑 } @Override public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) { // 在此处编写自定义的权限验证逻辑 } } ``` 在 evaluate 方法中,第一个参数 authentication 表示当前用户的认证信息,第二个参数 targetDomainObject 表示要验证的对象,第三个参数 permission 表示要验证的权限。 如果要验证的对象是一个实体类,可以使用 @PreAuthorize 或 @PostAuthorize 注解配合 SpEL 表达式来进行验证: ```java @PreAuthorize("hasPermission(#entity, 'read')") public void doSomething(Entity entity) { // ... } ``` 在 SpEL 表达式中,可以使用 #parameterName 来引用方法参数,也可以使用 #returnObject 来引用方法返回值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值