当前位置: 首页 > 面试题库 >

JSF-春季安全集成问题

柯正谊
2023-03-14
问题内容

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 Action 拦截内部转发 *

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

这样做的副作用是,弹簧安全性约束(绑定到URL)在下一个动作之前不会生效。

示例: 当前页面URL:http://host/myapp/page1.xhtml
(page1.xhtml具有导航到受保护的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 config 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>

问题答案:

从马口说起
(Oracle文档)

如果导航用例不使用redirect元素, 则将新页面呈现为对当前请求的响应
,这意味着浏览器的address字段中的URL不会更改,并且它将包含上一页的地址。

这似乎意味着在JSF生命周期中没有“前进”发生到下一页……因此Spring Security将永远无法解决这个问题。



 类似资料:
  • 问题内容: 我正在研究Java Spring MVC应用程序。我已经实现了这样的接口: 我需要在method 内找到用户登录URL (因为该项目有多个登录URL)。实际上, 我想在实现内部访问请求参数。 问题答案: 只需将请求注入您的服务即可: 为了使其正常工作,您需要预先注册RequestContextListener,但是:

  • 问题内容: 自从迁移到Spring Security 3.2.5.RELEASE和Spring 4.1.1.RELEASE之后,我们在Eclipse(Luna)中收到了Spring Bean Validation警告。 确切的警告是: 这是此Spring文件的标头: 配置的令人讨厌的部分如下(这意味着,如果我删除此部分,错误就会消失。特别是,如果我删除了节,则: 关于此问题的根本原因有任何想法吗?

  • 问题内容: 我试图将Spring集成到具有数千个类的大型应用程序中,并且由于组件扫描,我在启动容器时遇到了巨大的延迟。 我已经将“基本软件包”中指定的目录数量缩小到最小,以减少扫描无关目录所浪费的时间,但是初始化的类路径扫描部分仍然需要大约1-2分钟。 那么,有没有一种方法可以优化扫描过程?我曾考虑过将候选类路径存储在文件中,然后使容器从文件中获取,而不是每次启动时都扫描类路径,但是我真的不知道从

  • 问题内容: 我有一个Java应用程序,它从主类开始(不是Spring Boot应用程序)。而且我想使用Spring retry在连接丢失时重试。据我所知,我需要在Spring应用程序的主类之上添加@EnableRetry批注,然后在我的方法之上使用@Retryable进行重试。但是我认为这在非​​Spring应用程序中将不起作用。是否可以在简单的Java应用程序(而非spring应用程序)中使用s

  • 问题内容: 我如何让Spring从中加载Hibernate的属性? 我们正在使用Spring和JPA(以Hibernate作为实现)。Spring 指定了JPA语言和Hibernate属性: 在这种配置中,Spring通过applicationContext.xml读取所有的Hibernate属性。当我创建一个(位于我的类路径的根目录,与META- INF处于同一级别)时,Hibernate根本不

  • 问题内容: 有人可以用简单的术语解释ProxyFactoryBean吗? 我看到很多地方都引用了它。 问题答案: 用于将拦截器逻辑应用于现有目标Bean,以便在调用该Bean上的方法时,拦截器在该方法调用之前和之后执行。这是面向方面的编程(AOP)的示例。 最好用一个简单的例子来解释。AOP的经典用例是将缓存应用于方法调用的结果。可以使用以下方式进行连接: 我们有一个类型为bean 的类型,它实现