在我的界面代码中用以下方式控制某个按钮是否显示,如:
<@sec.authorize ifAnyGranted="ROLE_ADMIN">
<input type="button" id="deleteButton" class="formButton" url="order!delete.action" value="删除" disabled hidefocus />
</@sec.authorize>
目的是让只有ROLE_ADMIN权限的用户才能看到删除按钮,但结果无论是拥有ROLE_ADMIN权限的还是没有ROLE_ADMIN权限的都看不到删除按钮了。
最后发现是web.xml文件中的配置问题,我的基础框架默认只对admin目录下的资源进行过滤,如下:
<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>/admin/*</url-pattern>
</filter-mapping>
但我的页面实际上是在order目录下的,所以页面没有经过权限过滤器的控制,自然是获取不到用户的角色信息了。只要在web.xml中增加以下配置即可
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/order/*</url-pattern>
</filter-mapping>