|
@@ -12,12 +12,16 @@
|
|
|
*/
|
|
|
package org.springframework.security.taglibs.authz;
|
|
|
|
|
|
+import static org.fest.assertions.Assertions.*;
|
|
|
+
|
|
|
import static org.mockito.Matchers.any;
|
|
|
import static org.mockito.Matchers.eq;
|
|
|
import static org.mockito.Mockito.mock;
|
|
|
import static org.mockito.Mockito.verify;
|
|
|
+import static org.mockito.Mockito.when;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
+import java.util.Collections;
|
|
|
|
|
|
import javax.servlet.ServletContext;
|
|
|
import javax.servlet.ServletRequest;
|
|
@@ -29,10 +33,14 @@ import org.junit.Test;
|
|
|
import org.springframework.mock.web.MockHttpServletRequest;
|
|
|
import org.springframework.mock.web.MockHttpServletResponse;
|
|
|
import org.springframework.mock.web.MockServletContext;
|
|
|
+import org.springframework.security.access.expression.SecurityExpressionHandler;
|
|
|
+import org.springframework.security.authentication.TestingAuthenticationToken;
|
|
|
import org.springframework.security.core.Authentication;
|
|
|
import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
import org.springframework.security.web.WebAttributes;
|
|
|
import org.springframework.security.web.access.WebInvocationPrivilegeEvaluator;
|
|
|
+import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler;
|
|
|
+import org.springframework.web.context.WebApplicationContext;
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -71,6 +79,33 @@ public class AbstractAuthorizeTagTests {
|
|
|
verify(expected).isAllowed(eq(""), eq(uri), eq("GET"), any(Authentication.class));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void privilegeEvaluatorFromChildContext() throws IOException {
|
|
|
+ String uri = "/something";
|
|
|
+ WebInvocationPrivilegeEvaluator expected = mock(WebInvocationPrivilegeEvaluator.class);
|
|
|
+ tag.setUrl(uri);
|
|
|
+ WebApplicationContext wac = mock(WebApplicationContext.class);
|
|
|
+ when(wac.getBeansOfType(WebInvocationPrivilegeEvaluator.class)).thenReturn(Collections.singletonMap("wipe", expected));
|
|
|
+ servletContext.setAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcher", wac);
|
|
|
+
|
|
|
+ tag.authorizeUsingUrlCheck();
|
|
|
+
|
|
|
+ verify(expected).isAllowed(eq(""), eq(uri), eq("GET"), any(Authentication.class));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ @SuppressWarnings("rawtypes")
|
|
|
+ public void expressionFromChildContext() throws IOException {
|
|
|
+ SecurityContextHolder.getContext().setAuthentication(new TestingAuthenticationToken("user", "pass","USER"));
|
|
|
+ DefaultWebSecurityExpressionHandler expected = new DefaultWebSecurityExpressionHandler();
|
|
|
+ tag.setAccess("permitAll");
|
|
|
+ WebApplicationContext wac = mock(WebApplicationContext.class);
|
|
|
+ when(wac.getBeansOfType(SecurityExpressionHandler.class)).thenReturn(Collections.<String,SecurityExpressionHandler>singletonMap("wipe", expected));
|
|
|
+ servletContext.setAttribute("org.springframework.web.servlet.FrameworkServlet.CONTEXT.dispatcher", wac);
|
|
|
+
|
|
|
+ assertThat(tag.authorize()).isTrue();
|
|
|
+ }
|
|
|
+
|
|
|
private class AuthzTag extends AbstractAuthorizeTag {
|
|
|
|
|
|
@Override
|