gpt4 book ai didi

java - JSF - Spring Security 集成问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:57 24 4
gpt4 key购买 nike

Servlet 2.4+ API 允许我们使用 <dispatcher> <filter-mapping> 内的标签带有类似 FORWARD 值的标签拦截内部转发到其他资源的请求。对于一个 Servlet 转发到另一个 Servlet,Spring 安全约束工作得很好。

<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

问题:安全过滤器似乎没有通过 JSF Actions

拦截内部转发

JSF 似乎在使用 JSF 操作(导航案例)时将请求“转发”到目标 View (页面)。这会导致 URL 比页面的实际 URL 落后一步。

这样做的副作用是 Spring 安全约束(与 URL 绑定(bind))直到下一个操作才会生效。

示例:当前页面网址:http://host/myapp/page1.xhtml(page1.xhtml 有一个导航到 protected page2 的操作)

提交时,请求被提交到呈现 page2.xhtml 的服务器,但 URL 仍保留为 http://host/myapp/page1.xhtml 。 Spring Security 不会拦截和保护 page2.xhtml

可以通过指定以下内容来克服这个问题:

<navigation-case>
<from-outcome>page2</from-outcome>
<to-view-id>/page2.xhtml</to-view-id>
<redirect/> <!--REDIRECT, INSTEAD OF FORWARD-->
</navigation-case>

重定向不是我们想要实现这一目标的方式。有没有更好的方法让 Spring Security 与 JSF 一起工作?

编辑:(spring 配置 xml 的相关片段)

<http use-expressions="true" once-per-request="false">
<intercept-url pattern="/index.xhtml" access="permitAll" />
<intercept-url pattern="/page1.xhtml" access="isAuthenticated()" />
<intercept-url pattern="/page2.xhtml" access="hasRole('supervisor')" />
<intercept-url pattern="/page3.xhtml" access="hasRole('teller')" />
<form-login login-page="/login.html" default-target-url="/page1.xhtml"/>
</http>

<authentication-manager>
<authentication-provider>
<user-service>
<user name="rod" password="rod" authorities="supervisor, user" />
<user name="dianne" password="dianne" authorities="teller, user" />
<user name="scott" password="scott" authorities="supervisor" />
<user name="peter" password="peter" authorities="user" />
</user-service>
</authentication-provider>
</authentication-manager>

最佳答案

来自horse's mouth (Oracle文档)

If a navigation case does not use the redirect element, the new page is rendered as a response to the current request, which means that the URL in the browser's address field does not change and that it will contain the address of the previous page.

这似乎意味着在 JSF 生命周期中没有“转发”到下一页......因此 Spring Security 永远不会处理这个问题。

关于java - JSF - Spring Security 集成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9177104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com