11.3.1. Restfaces

Kicsi, csak a könyvjelzőzhető linkek JSF-beli támogatását akarja megoldani, egyszerűen használható: röviden ennyit lehet elmondani a Restfaces-ről ([26]), amelyet szűrőként kell beilleszteni a webalkalmazásba. A Restfaces-zel két lehetőség van az ilyen linkek készítésére. Az elsőhöz szükséges egy XML fájl is. Egy JSF oldalon szereplő linket létrehozó kódrészlet a következő lehet:

<rest:link value="item">
	<f:param name="itemId" value="#{item.id}" />
	<h:outputText value="#{item.name}" />
</rest:link>
<!-- item.xhtml?itemId=123 -->

15. ábra: Egy könyvjelzőzhető linket előállító restfaces tag

Az ehhez szükséges rest‑faces‑rules.xml konfigurációs fájl határozza meg az URL‑beli paraméterek és a backing bean mezők összerendelését (16. ábra), valamint a meghívandó backing bean metódust is. A paraméterek beállítása és a metódus meghívása a fenti rest:link tag által létrehozott linkre való kattintás hatására történik meg.

<?xml version="1.0" encoding="UTF-8"?>
<rest-faces>
	<action name="item" value="#{itemBean.selectItem}">
		<property param="itemId" 
			value="#{itemBean.itemId}" />
	</action>
</rest-faces>

16. ábra: rest-faces-rules.xml példa

A második megoldáshoz nem szükséges az XML fájl, viszont nagy biztonsági kockázatot jelent, ugyanis az URL-be kerül a backing bean neve, a beállítandó tagváltozókkal és azok leendő értékével együtt. A veszély abban rejlik, hogy ezt a kliens szabadon módosíthatja, tehát bármilyen metódust meghívhat és bármilyen mező értékét tetszőlegesre állíthatja a hívás előtt – ellentétben az első megoldással, ahol csak az XML‑ben property tag-gel meghatározott mezők értékét befolyásolhatja a kliens.

<rest:link action="#{bean.method}">
	<rest:param name="id" value="3" property="#{bean.id}"/>
	permalink
</rest:link>

17. ábra: Példa rest-faces-rules.xml nélküli rest:link tag-re

Az XML nélküli mód használata hasonlít az XML-es változathoz (17. ábra), azonban a generált linkek a következőképp néznek ki:

http://localhost:8090/FeedGen-war/restmeta/ \ 
UrlListManagedBean.editUrl_id*UrlListManagedBean.editedUrlId \
*true*null.xhtml?id=12

18. ábra: Egy rest-faces-rules.xml nélkül előállított link

A probléma kiküszöbölhető, ha titkosítjuk az URL-t egy web.xml-ben megadott kulccsal (19. ábra), de ekkor elveszítjük a szép URL-eket (viszont elmenthetőek könyvjelzőként). A módszer további hátránya, hogy a kulcs változása esetén a linkek is megváltoznak.

<context-param>
	<param-name>
	org.restfaces.serializer.CryptActionSerializer.key
	</param-name>
	<param-value>a32543sd5fsdgs33</param-value>
</context-param>

19. ábra: rest-faces-rules.xml nélküli linkek titkosítására szolgáló web.xml-beli bejegyzés

A második változat említett hátrányai miatt az elkészült programban az első, XML konfigurációs fájlt igénylő módot használtam.

Tartalom átvétel