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 的类型,它实现