PrettyFaces/Rewrite를 사용하여 JSF 응용 프로그램과 PicketLink에서 URL을 다시 작성하여 보호하려면 PicketLink가 다시 쓰기 규칙을 사용하지 않는 것 같습니다. 예를 들어PrettyFaces와 PicketLink 결합
, 나는 이런 식으로 뭔가에 PicketLink를 구성하는 경우 :
builder
.http()
.allPaths()
.authenticateWith()
.form()
.loginPage("/common/login.xhtml")
그리고 이런 재 작성 규칙이 있습니다
<url-mapping id="login">
<pattern value="/login" />
<view-id value="/common/login.xhtml" />
</url-mapping>
는 사용자가 /common/login.xhtml
대신 /login
로 리디렉션됩니다.
PicketLink에서 loginPage로 /login
을 사용할 수 있다는 것을 알고 있지만, 지금까지는 내 응용 프로그램에 대해 완전히 투명한 방식으로 PrettyFaces/Rewrite를 사용할 수있었습니다 (제거하고 모든 것이 여전히 작동 할 수 있습니다 ..). 하지만 추한 URL로). PrettyFaces가 encodeRedirectUrl()
를 대체 어떻게 든 HttpServletResponse
포장되는 경우 SecurityFilter
이 감싸 표시되지 않습니다,
at org.ocpsoft.rewrite.servlet.impl.HttpRewriteResultHandler.handleResult(HttpRewriteResultHandler.java:41)
at org.ocpsoft.rewrite.servlet.RewriteFilter.rewrite(RewriteFilter.java:268)
at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:188)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.picketlink.http.internal.SecurityFilter.processRequest(SecurityFilter.java:346)
at org.picketlink.http.internal.SecurityFilter.performOutboundProcessing(SecurityFilter.java:237)
at org.picketlink.http.internal.SecurityFilter.doFilter(SecurityFilter.java:196)
그래서 :
나는 PicketLink에서 SecurityFilter
가 다시 작성/PrettyFaces에서 RewriteFilter
전에 올 것 같다 것으로 나타났습니다 응답은 이전과 같습니다.
SecurityFilter
앞에 RewriteFilter
이 올 수있는 방법이 있습니까?
배포 설명자에 해당 필터를 선언하지 않았지만 PrettyFaces의 경우 web-fragment.xml
을 통해 그리고 PicketLink의 경우 @WebListener
을 통해 자동으로 등록되었습니다.
맞음! 이 문제를 해결하려면 절대 순서 지정을 사용하십시오. – Lincoln
이것은 작동하지 않습니다 :'SecurityFilter'는 여전히'RewriteFilter' 전에옵니다. 필자는 이것이 2 개의 프레임 워크가 각각의 필터를 등록하는 방법에서 나온 것이라고 생각합니다. PicketLink는'PicketLinkServletContextListener'에서 필터를 등록하고 Rewrite는'web-fragment.xml'에서 필터를 등록합니다. 모든'ServletContextListener'가 먼저 처리되었으므로 (PicketLink가 필터를 등록합니다), DD의 다른 모든 필터가 추가됩니다 (재 작성). 따라서 주문은 여기에 영향을 미치지 않습니다. 중단 점을 두 필터로 설정하고'SecurityFilter'는'RewriteFilter' 전에 초기화/연결됩니다. –
가능한 해결책은 Rewrite가 자체 RewriteServletContextListener에서 필터를 등록하는 것입니다. –