Browse Source
Previously wiring dependencies created with a FactoryBean into
MethodSecurityExpressionHandler &
MethodSecurityExpressionHandler.expressionParser and would cause
NoSuchBeanDefinitionException's to occur. These changes make it easier
(but not impossible) to avoid such errors.
The following changes were made:
- ExpressionBasedAnnotationAttributeFactory delays the invocation of
MethodSecurityExpressionHandler.getExpressionParser()
- MethodSecurityExpressionHandler is automatically wrapped in a
LazyInitTargetSource and marked as lazyInit=true
pull/16/merge
6 changed files with 222 additions and 4 deletions
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
/* |
||||
* Copyright 2002-2013 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.springframework.security.config.method.sec2136; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
import javax.persistence.EntityManager; |
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.security.access.PermissionEvaluator; |
||||
import org.springframework.security.core.Authentication; |
||||
|
||||
/** |
||||
* |
||||
* @author Rob Winch |
||||
* |
||||
*/ |
||||
public class JpaPermissionEvaluator implements PermissionEvaluator { |
||||
@Autowired |
||||
private EntityManager entityManager; |
||||
|
||||
public JpaPermissionEvaluator() { |
||||
System.out.println("initializing "+this); |
||||
} |
||||
|
||||
public boolean hasPermission(Authentication authentication, |
||||
Object targetDomainObject, Object permission) { |
||||
return true; |
||||
} |
||||
|
||||
public boolean hasPermission(Authentication authentication, |
||||
Serializable targetId, String targetType, Object permission) { |
||||
return true; |
||||
} |
||||
} |
||||
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
/* |
||||
* Copyright 2002-2013 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not |
||||
* use this file except in compliance with the License. You may obtain a copy of |
||||
* the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
||||
* License for the specific language governing permissions and limitations under |
||||
* the License. |
||||
*/ |
||||
package org.springframework.security.config.method.sec2136; |
||||
|
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
|
||||
/** |
||||
* |
||||
* @author Rob Winch |
||||
* @since 3.2 |
||||
*/ |
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@ContextConfiguration("sec2136.xml") |
||||
public class Sec2136Tests { |
||||
|
||||
@Test |
||||
public void configurationLoads() { |
||||
|
||||
} |
||||
} |
||||
@ -0,0 +1,55 @@
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<beans xmlns="http://www.springframework.org/schema/beans" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xmlns:jpa="http://www.springframework.org/schema/data/jpa" |
||||
xmlns:context="http://www.springframework.org/schema/context" |
||||
xmlns:jdbc="http://www.springframework.org/schema/jdbc" |
||||
xmlns:security="http://www.springframework.org/schema/security" |
||||
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd |
||||
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd |
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd |
||||
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd |
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> |
||||
|
||||
<context:annotation-config /> |
||||
|
||||
<bean id="entityManagerFactory" |
||||
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> |
||||
<property name="dataSource" ref="dataSource" /> |
||||
<property name="packagesToScan" value="entity" /> |
||||
<property name="jpaVendorAdapter"> |
||||
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> |
||||
<property name="showSql" value="true" /> |
||||
<property name="generateDdl" value="false" /> |
||||
<property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" /> |
||||
</bean> |
||||
</property> |
||||
<property name="jpaProperties"> |
||||
<props> |
||||
<prop key="hibernate.hbm2ddl.auto">create-drop</prop> |
||||
<prop key="hibernate.id.new_generator_mappings">true</prop> |
||||
<prop key="hibernate.cache.use_second_level_cache">false</prop> |
||||
</props> |
||||
</property> |
||||
</bean> |
||||
|
||||
<!-- DataSource Configuration --> |
||||
<jdbc:embedded-database id="dataSource"/> |
||||
|
||||
<!-- Transaction Configuration --> |
||||
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> |
||||
<property name="entityManagerFactory" ref="entityManagerFactory" /> |
||||
</bean> |
||||
|
||||
<security:global-method-security pre-post-annotations="enabled"> |
||||
<security:expression-handler ref="methodExpressionHandler"/> |
||||
</security:global-method-security> |
||||
|
||||
<bean id="methodExpressionHandler" |
||||
class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler"> |
||||
<property name="permissionEvaluator" ref="jpaPermEvaluator"/> |
||||
</bean> |
||||
|
||||
<!-- Must be lazy init or inner bean to prevent eager loading of singletons --> |
||||
<bean id="jpaPermEvaluator" class="org.springframework.security.config.method.sec2136.JpaPermissionEvaluator" autowire="byType" lazy-init="true"/> |
||||
</beans> |
||||
Loading…
Reference in new issue