我想在我的Web應用程序中應用方法級安全性,以便只有授權用戶才能訪問這些服務層方法。Spring Security - 全局方法使用切點的安全性不起作用
有兩種實現方法。
1)使用@Secured
註釋註釋我的服務層方法,並在具有配置(<security:global-method-security secured-annotations="enabled" />
)的dispatcher-servlet.xml文件中註釋。
但在我的情況下,這會花費很多時間,因爲已經創建了很多服務類和方法,因此找到方法並註釋它們不是一個好方法。
2)要定義方法級別安全性的減法表達式,它將自動檢測我的服務中具有自定義註釋@SecuredAdmin
的方法,並使用角色ROLE_ADMIN
保護它們。
在我的情況下,當我嘗試測試時,選項1)工作得很好。沒有問題。但是當我嘗試使用以下配置的選項2)時,我無法啓動我的應用程序。
<security:global-method-security>
<security:protect-pointcut access="ROLE_ADMIN" expression="execution(@com.xxx.yyy.zzz.services.SecuredAdmin * *.*(..))"/>
</security:global-method-security>
當我嘗試啓動我的服務器時出現以下異常。
java.lang.IllegalArgumentException: error annotation type patterns are only supported at Java 5 compliance level or above
org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:302)
org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:279)
org.springframework.security.config.method.ProtectPointcutPostProcessor.postProcessBeforeInitialization(ProtectPointcutPostProcessor.java:94)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1448)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
org.springframework.context.support.AbstractApplicationContext.initMessageSource(AbstractApplicationContext.java:773)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
org.apache.catalina.ha.tcp.ReplicationValve.invoke(ReplicationValve.java:333)
org.apache.catalina.ha.session.JvmRouteBinderValve.invoke(JvmRouteBinderValve.java:219)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
我已經盡一切可能將代碼合規性級別更改爲1.6在pom文件和eclipse項目屬性中。
我正在使用Spring-Security 3.0和與aspectj相關的庫如下。
彈簧AOP-3.1.0.RELEASE.jar
彈簧方面-3.1.0.RELEASE.jar
aspectjrt-1.6.5.jar
aspectjweaver-1.6.5 .jar
請在這方面給我幫助。詢問我是否需要更多信息。
在此先感謝。
謝謝。讓我試試看,我會盡快回復你。 –
我已經包含了這個插件我的pom.xml,但沒有運氣。我的應用程序有三個maven模塊。兩個模塊打包爲jar,這兩個模塊都包含在第三個打包爲war的模塊中。所有這三個模塊都是以pom打包的maven項目的一部分。你認爲我應該把這個插件配置在哪裏?我仍然收到同樣的錯誤。 –
在每個使用方面的項目中。 –