📄 casauthenticationprovidertests.java
字号:
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited * * 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.acegisecurity.providers.cas;import junit.framework.TestCase;import org.acegisecurity.Authentication;import org.acegisecurity.AuthenticationException;import org.acegisecurity.BadCredentialsException;import org.acegisecurity.GrantedAuthority;import org.acegisecurity.GrantedAuthorityImpl;import org.acegisecurity.providers.TestingAuthenticationToken;import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;import org.acegisecurity.providers.cas.ticketvalidator.AbstractTicketValidator;import org.acegisecurity.ui.cas.CasProcessingFilter;import org.acegisecurity.userdetails.User;import org.acegisecurity.userdetails.UserDetails;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Vector;/** * Tests {@link CasAuthenticationProvider}. * * @author Ben Alex * @version $Id: CasAuthenticationProviderTests.java 2237 2007-11-07 21:55:59Z sbattaglia $ */public class CasAuthenticationProviderTests extends TestCase { //~ Constructors =================================================================================================== public CasAuthenticationProviderTests() { super(); } public CasAuthenticationProviderTests(String arg0) { super(arg0); } //~ Methods ======================================================================================================== public static void main(String[] args) { junit.textui.TestRunner.run(CasAuthenticationProviderTests.class); } private UserDetails makeUserDetails() { return new User("user", "password", true, true, true, true, new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")}); } private UserDetails makeUserDetailsFromAuthoritiesPopulator() { return new User("user", "password", true, true, true, true, new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_A"), new GrantedAuthorityImpl("ROLE_B")}); } public final void setUp() throws Exception { super.setUp(); } public void testAuthenticateStateful() throws Exception { CasAuthenticationProvider cap = new CasAuthenticationProvider(); cap.setCasAuthoritiesPopulator(new MockAuthoritiesPopulator()); cap.setCasProxyDecider(new MockProxyDecider(true)); cap.setKey("qwerty"); StatelessTicketCache cache = new MockStatelessTicketCache(); cap.setStatelessTicketCache(cache); cap.setTicketValidator(new MockTicketValidator(true)); cap.afterPropertiesSet(); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(CasProcessingFilter.CAS_STATEFUL_IDENTIFIER, "ST-123"); Authentication result = cap.authenticate(token); // Confirm ST-123 was NOT added to the cache assertTrue(cache.getByTicketId("ST-456") == null); if (!(result instanceof CasAuthenticationToken)) { fail("Should have returned a CasAuthenticationToken"); } CasAuthenticationToken casResult = (CasAuthenticationToken) result; assertEquals(makeUserDetailsFromAuthoritiesPopulator(), casResult.getPrincipal()); assertEquals("PGTIOU-0-R0zlgrl4pdAQwBvJWO3vnNpevwqStbSGcq3vKB2SqSFFRnjPHt", casResult.getProxyGrantingTicketIou()); assertEquals("https://localhost/portal/j_acegi_cas_security_check", casResult.getProxyList().get(0)); assertEquals("ST-123", casResult.getCredentials()); assertEquals(new GrantedAuthorityImpl("ROLE_A"), casResult.getAuthorities()[0]); assertEquals(new GrantedAuthorityImpl("ROLE_B"), casResult.getAuthorities()[1]); assertEquals(cap.getKey().hashCode(), casResult.getKeyHash()); // Now confirm the CasAuthenticationToken is automatically re-accepted. // To ensure TicketValidator not called again, set it to deliver an exception... cap.setTicketValidator(new MockTicketValidator(false)); Authentication laterResult = cap.authenticate(result); assertEquals(result, laterResult); } public void testAuthenticateStateless() throws Exception { CasAuthenticationProvider cap = new CasAuthenticationProvider(); cap.setCasAuthoritiesPopulator(new MockAuthoritiesPopulator()); cap.setCasProxyDecider(new MockProxyDecider(true)); cap.setKey("qwerty"); StatelessTicketCache cache = new MockStatelessTicketCache(); cap.setStatelessTicketCache(cache); cap.setTicketValidator(new MockTicketValidator(true)); cap.afterPropertiesSet(); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(CasProcessingFilter.CAS_STATELESS_IDENTIFIER, "ST-456"); Authentication result = cap.authenticate(token); // Confirm ST-456 was added to the cache assertTrue(cache.getByTicketId("ST-456") != null); if (!(result instanceof CasAuthenticationToken)) { fail("Should have returned a CasAuthenticationToken"); } assertEquals(makeUserDetailsFromAuthoritiesPopulator(), result.getPrincipal()); assertEquals("ST-456", result.getCredentials()); // Now try to authenticate again. To ensure TicketValidator not // called again, set it to deliver an exception... cap.setTicketValidator(new MockTicketValidator(false)); // Previously created UsernamePasswordAuthenticationToken is OK Authentication newResult = cap.authenticate(token); assertEquals(makeUserDetailsFromAuthoritiesPopulator(), newResult.getPrincipal()); assertEquals("ST-456", newResult.getCredentials()); } public void testDetectsAMissingTicketId() throws Exception { CasAuthenticationProvider cap = new CasAuthenticationProvider(); cap.setCasAuthoritiesPopulator(new MockAuthoritiesPopulator()); cap.setCasProxyDecider(new MockProxyDecider(true)); cap.setKey("qwerty"); StatelessTicketCache cache = new MockStatelessTicketCache(); cap.setStatelessTicketCache(cache); cap.setTicketValidator(new MockTicketValidator(true)); cap.afterPropertiesSet(); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(CasProcessingFilter.CAS_STATEFUL_IDENTIFIER, ""); try { Authentication result = cap.authenticate(token); fail("Should have thrown BadCredentialsException"); } catch (BadCredentialsException expected) { assertEquals("Failed to provide a CAS service ticket to validate", expected.getMessage()); } } public void testDetectsAnInvalidKey() throws Exception { CasAuthenticationProvider cap = new CasAuthenticationProvider(); cap.setCasAuthoritiesPopulator(new MockAuthoritiesPopulator()); cap.setCasProxyDecider(new MockProxyDecider(true)); cap.setKey("qwerty"); StatelessTicketCache cache = new MockStatelessTicketCache(); cap.setStatelessTicketCache(cache); cap.setTicketValidator(new MockTicketValidator(true)); cap.afterPropertiesSet(); CasAuthenticationToken token = new CasAuthenticationToken("WRONG_KEY", makeUserDetails(), "credentials", new GrantedAuthority[] {new GrantedAuthorityImpl("XX")}, makeUserDetails(), new Vector(), "IOU-xxx"); try { Authentication result = cap.authenticate(token); fail("Should have thrown BadCredentialsException"); } catch (BadCredentialsException expected) { assertEquals("The presented CasAuthenticationToken does not contain the expected key", expected.getMessage()); } } public void testDetectsMissingAuthoritiesPopulator() throws Exception { CasAuthenticationProvider cap = new CasAuthenticationProvider(); cap.setCasProxyDecider(new MockProxyDecider()); cap.setKey("qwerty"); cap.setStatelessTicketCache(new MockStatelessTicketCache());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -