Browse Source

SEC-1354: Added integration tests for combinations of @PreAuthorize and @Secured annotations.

3.0.x
Luke Taylor 16 years ago
parent
commit
4e4242d010
  1. 24
      itest/context/src/main/java/org/springframework/security/integration/multiannotation/MultiAnnotationService.java
  2. 17
      itest/context/src/main/java/org/springframework/security/integration/multiannotation/MultiAnnotationServiceImpl.java
  3. 13
      itest/context/src/main/java/org/springframework/security/integration/multiannotation/PreAuthorizeService.java
  4. 9
      itest/context/src/main/java/org/springframework/security/integration/multiannotation/PreAuthorizeServiceImpl.java
  5. 12
      itest/context/src/main/java/org/springframework/security/integration/multiannotation/SecuredService.java
  6. 10
      itest/context/src/main/java/org/springframework/security/integration/multiannotation/SecuredServiceImpl.java
  7. 86
      itest/context/src/test/java/org/springframework/security/integration/MultiAnnotationTests.java
  8. 26
      itest/context/src/test/resources/multi-sec-annotation-app-context.xml

24
itest/context/src/main/java/org/springframework/security/integration/multiannotation/MultiAnnotationService.java

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
package org.springframework.security.integration.multiannotation;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PreAuthorize;
/**
* Allows testing mixing of different annotation types
*
* @author Luke Taylor
*/
public interface MultiAnnotationService {
@PreAuthorize("denyAll")
void preAuthorizeDenyAllMethod();
@PreAuthorize("hasRole('ROLE_A')")
void preAuthorizeHasRoleAMethod();
@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
void securedAnonymousMethod();
@Secured("ROLE_A")
void securedRoleAMethod();
}

17
itest/context/src/main/java/org/springframework/security/integration/multiannotation/MultiAnnotationServiceImpl.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package org.springframework.security.integration.multiannotation;
public class MultiAnnotationServiceImpl implements MultiAnnotationService {
public void preAuthorizeDenyAllMethod() {
}
public void preAuthorizeHasRoleAMethod() {
}
public void securedAnonymousMethod() {
}
public void securedRoleAMethod() {
}
}

13
itest/context/src/main/java/org/springframework/security/integration/multiannotation/PreAuthorizeService.java

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
package org.springframework.security.integration.multiannotation;
import org.springframework.security.access.prepost.PreAuthorize;
/**
*
* @author Luke Taylor
*/
public interface PreAuthorizeService {
@PreAuthorize("hasRole('ROLE_A')")
void preAuthorizedMethod();
}

9
itest/context/src/main/java/org/springframework/security/integration/multiannotation/PreAuthorizeServiceImpl.java

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
package org.springframework.security.integration.multiannotation;
/**
* @author Luke Taylor
*/
public class PreAuthorizeServiceImpl implements PreAuthorizeService {
public void preAuthorizedMethod() {
}
}

12
itest/context/src/main/java/org/springframework/security/integration/multiannotation/SecuredService.java

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
package org.springframework.security.integration.multiannotation;
import org.springframework.security.access.annotation.Secured;
/**
*
* @author Luke Taylor
*/
public interface SecuredService {
@Secured("ROLE_A")
void securedMethod();
}

10
itest/context/src/main/java/org/springframework/security/integration/multiannotation/SecuredServiceImpl.java

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
package org.springframework.security.integration.multiannotation;
/**
*
* @author Luke Taylor
*/
public class SecuredServiceImpl implements SecuredService {
public void securedMethod() {
}
}

86
itest/context/src/test/java/org/springframework/security/integration/MultiAnnotationTests.java

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
package org.springframework.security.integration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authentication.TestingAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.integration.multiannotation.MultiAnnotationService;
import org.springframework.security.integration.multiannotation.PreAuthorizeService;
import org.springframework.security.integration.multiannotation.SecuredService;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Luke Taylor
*/
@ContextConfiguration(locations={"/multi-sec-annotation-app-context.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class MultiAnnotationTests {
private final TestingAuthenticationToken joe_a = new TestingAuthenticationToken("joe","pass","ROLE_A");
private final TestingAuthenticationToken joe_b = new TestingAuthenticationToken("joe","pass","ROLE_B");
@Autowired
MultiAnnotationService service;
@Autowired
PreAuthorizeService preService;
@Autowired
SecuredService secService;
@After
@Before
public void clearContext() {
SecurityContextHolder.clearContext();
}
@Test(expected=AccessDeniedException.class)
public void preAuthorizeDeniedIsDenied() {
SecurityContextHolder.getContext().setAuthentication(joe_a);
service.preAuthorizeDenyAllMethod();
}
@Test(expected=AccessDeniedException.class)
public void preAuthorizeRoleAIsDeniedIfRoleMissing() {
SecurityContextHolder.getContext().setAuthentication(joe_b);
service.preAuthorizeHasRoleAMethod();
}
@Test
public void preAuthorizeRoleAIsAllowedIfRolePresent() {
SecurityContextHolder.getContext().setAuthentication(joe_a);
service.preAuthorizeHasRoleAMethod();
}
@Test
public void securedAnonymousIsAllowed() {
SecurityContextHolder.getContext().setAuthentication(joe_a);
service.securedAnonymousMethod();
}
@Test(expected=AccessDeniedException.class)
public void securedRoleAIsDeniedIfRoleMissing() {
SecurityContextHolder.getContext().setAuthentication(joe_b);
service.securedRoleAMethod();
}
@Test
public void securedRoleAIsAllowedIfRolePresent() {
SecurityContextHolder.getContext().setAuthentication(joe_a);
service.securedRoleAMethod();
}
@Test(expected=AccessDeniedException.class)
public void preAuthorizedOnlyServiceDeniesIfRoleMissing() throws Exception {
SecurityContextHolder.getContext().setAuthentication(joe_b);
preService.preAuthorizedMethod();
}
@Test(expected=AccessDeniedException.class)
public void securedOnlyRoleAServiceDeniesIfRoleMissing() throws Exception {
SecurityContextHolder.getContext().setAuthentication(joe_b);
secService.securedMethod();
}
}

26
itest/context/src/test/resources/multi-sec-annotation-app-context.xml

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
<b:beans xmlns="http://www.springframework.org/schema/security"
xmlns:b="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">
<global-method-security pre-post-annotations="enabled" secured-annotations="enabled" />
<b:bean class="org.springframework.security.integration.multiannotation.MultiAnnotationServiceImpl"/>
<b:bean class="org.springframework.security.integration.multiannotation.PreAuthorizeServiceImpl"/>
<b:bean class="org.springframework.security.integration.multiannotation.SecuredServiceImpl"/>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="bob" password="bobspassword" authorities="ROLE_A,ROLE_B"/>
</user-service>
</authentication-provider>
</authentication-manager>
</b:beans>
Loading…
Cancel
Save