我有拦截网址的配置,如
<security:http use-expressions="true" disable-url-rewriting="true">
<security:intercept-url pattern="/secure/admission/*" access="hasRole('ROLE_ADMISSIONER')" />
<security:intercept-url pattern="/secure/subdean/*" access="hasRole('ROLE_SUBDEAN')" />
<security:intercept-url pattern="/secure/referent/*" access="hasRole('ROLE_REFERENT')" />
<security:intercept-url pattern="/secure/index.xhtml" access="hasRole('ROLE_REFERENT, ROLE_SUBDEAN')" />
<security:intercept-url pattern="/secure/*" access="hasRole('ROLE_OMNI_ADMIN')" />
<security:intercept-url pattern="/**" access="isAuthenticated()" />
但是现在我有一个问题是可以访问我的应用程序的url,例如MY_APPLICATION / PririzMaven / secure / admin / updateRole.xhtml,角色为ROLE_ADMISSIONER,url .... / secure / subdean / * with this相同的角色等......但它应该被禁止给这个用户。
你知道问题出在哪里吗?
答案 0 :(得分:5)
假设PririzMaven
是应用程序的上下文路径,/secure/admin/updateRole.xhtml
将与路径/**
匹配,因此所有经过身份验证的用户都可以访问。您没有/secure/admin
的规则。另请注意,单个'*'与子路径不匹配。例如,您应该使用/secure/admin/**
来匹配此路径下的所有内容。
您还应该启用调试日志记录并检查规则的应用方式 - 您应该看到针对传入请求URL调用的匹配器,并且将看到正在比较的内容以及匹配的内容。
最后,值得在应用程序上下文文件的顶部添加<security:debug />
,这将以更易于阅读的格式添加有关请求处理的其他有用的调试信息。