AspectJInterceptorTests.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package sample.aspectj;
  2. import org.junit.After;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.context.annotation.AdviceMode;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.security.access.AccessDeniedException;
  10. import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
  11. import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
  12. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
  13. import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
  14. import org.springframework.security.core.Authentication;
  15. import org.springframework.security.core.authority.AuthorityUtils;
  16. import org.springframework.security.core.context.SecurityContextHolder;
  17. import org.springframework.test.context.ContextConfiguration;
  18. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  19. import java.lang.reflect.Proxy;
  20. import static org.fest.assertions.Assertions.assertThat;
  21. @RunWith(SpringJUnit4ClassRunner.class)
  22. @ContextConfiguration(classes=AspectjSecurityConfig.class)
  23. public class AspectJInterceptorTests {
  24. private Authentication admin = new UsernamePasswordAuthenticationToken("test", "xxx", AuthorityUtils.createAuthorityList("ROLE_ADMIN"));
  25. private Authentication user = new UsernamePasswordAuthenticationToken("test", "xxx", AuthorityUtils.createAuthorityList("ROLE_USER"));
  26. @Autowired
  27. private Service service;
  28. @Autowired
  29. private SecuredService securedService;
  30. @Test
  31. public void publicMethod() throws Exception {
  32. service.publicMethod();
  33. }
  34. @Test(expected = AuthenticationCredentialsNotFoundException.class)
  35. public void securedMethodNotAuthenticated() throws Exception {
  36. service.secureMethod();
  37. }
  38. @Test(expected = AccessDeniedException.class)
  39. public void securedMethodWrongRole() throws Exception {
  40. SecurityContextHolder.getContext().setAuthentication(admin);
  41. service.secureMethod();
  42. }
  43. @Test
  44. public void securedMethodEverythingOk() throws Exception {
  45. SecurityContextHolder.getContext().setAuthentication(user);
  46. service.secureMethod();
  47. }
  48. @Test(expected = AuthenticationCredentialsNotFoundException.class)
  49. public void securedClassNotAuthenticated() throws Exception {
  50. securedService.secureMethod();
  51. }
  52. @Test(expected = AccessDeniedException.class)
  53. public void securedClassWrongRole() throws Exception {
  54. SecurityContextHolder.getContext().setAuthentication(admin);
  55. securedService.secureMethod();
  56. }
  57. @Test(expected = AccessDeniedException.class)
  58. public void securedClassWrongRoleOnNewedInstance() throws Exception {
  59. SecurityContextHolder.getContext().setAuthentication(admin);
  60. new SecuredService().secureMethod();
  61. }
  62. @Test
  63. public void securedClassEverythingOk() throws Exception {
  64. SecurityContextHolder.getContext().setAuthentication(user);
  65. securedService.secureMethod();
  66. new SecuredService().secureMethod();
  67. }
  68. // SEC-2595
  69. @Test
  70. public void notProxy() {
  71. assertThat(Proxy.isProxyClass(securedService.getClass())).isFalse();
  72. }
  73. @After
  74. public void tearDown() {
  75. SecurityContextHolder.clearContext();
  76. }
  77. }