0

问题一:

我已经在我的应用程序中设置了 Spring Security,但现在我遇到了一个奇怪的问题。我从 spring security 中学到的是,@RolesAllowed({"ROLE_ADMIN"})如果你设置了这个,你不需要在你的方法上方添加这行代码

<sec:http auto-config="true" access-denied-page="/faces/accessDenied.xhtml">
    <sec:form-login login-page="/faces/login.xhtml" />
    <sec:intercept-url pattern="/faces/admin/**" access="ROLE_ADMIN" />
</sec:http>

但显然我可以在没有弹簧安全的情况下转到“/faces/admin”文件夹中的页面,将我重定向到登录页面。

问题2:

@RolesAllowed({"ROLE_ADMIN"})我的方法上面有代码时,它会将我重定向到登录页面并正常工作,但是使用这个,我的控制台中出现访问被拒绝错误,并带有一堆错误代码(尽管应用程序仍然正常运行)。我可以在控制台中收到拒绝访问错误吗?如果不是,最好的处理方法是什么?

我仍然希望拥有受限页面文件夹,并且不必写@RolesAllowed在管理文件夹中的所有方法之上。

PS:它是一个 JSF 2.0 项目。

提前谢谢,干杯。

4

1 回答 1

0

问题 1:我认为您的 web.xml 中缺少 DelegatingFilterProxy。像这样配置:

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

并配置 http 元素如下:

<http auto-config="true" >
   <intercept-url pattern="/faces/login.xhtml*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
   <intercept-url pattern="/faces/admin/**" access="ROLE_ADMIN" />
   <access-denied-handler error-page="/faces/accessDenied.xhtml" />
   <form-login login-page='/faces/login.xhtml' default-target-url='/faces/index.xhtml'
        always-use-default-target='true'/>
</http>

而不是 access-denied-page 属性,使用 access-denied-handler 因为上述属性已被弃用。资源

问题2:是的,如果您将日志级别设置为DEBUG并以匿名用户身份首次访问受保护的资源,这是正常的。请参阅本常见问题的 1.3

于 2012-04-21T18:09:19.590 回答