/*
* Copyright 2008 Stichting JoiningTracks, The Netherlands
* 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.apache.wicket.security.examples.springsecurity;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.wicket.Page;
import org.apache.wicket.security.examples.springsecurity.security.MockLoginPage;
import org.apache.wicket.security.hive.HiveMind;
import org.apache.wicket.security.hive.config.PolicyFileHiveFactory;
import org.apache.wicket.security.hive.config.SwarmPolicyFileHiveFactory;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
import org.apache.wicket.spring.test.ApplicationContextMock;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.ProviderManager;
import org.springframework.security.authentication.TestingAuthenticationProvider;
/**
* WicketTestApplication for testing Spring Security and Wicket Security based
* applications
*
* @author Olger Warnier
*/
public class SpringSecureWicketTestApplication extends SpringSecureWicketApplication
{
private static final Log log = LogFactory.getLog(SpringSecureWicketTestApplication.class);
private AuthenticationManager authenticationManager;
@Override
public void init()
{
ApplicationContextMock appctx = new ApplicationContextMock();
// Make injection of spring beans in wicket-related classes possible using
// @SpringBean.
addComponentInstantiationListener(new SpringComponentInjector(this, appctx, true));
ProviderManager authMan = new ProviderManager();
List<TestingAuthenticationProvider> providerList =
new ArrayList<TestingAuthenticationProvider>();
providerList.add(new TestingAuthenticationProvider());
authMan.setProviders(providerList);
// appctx.putBean("testAuthenticationProvider", authProvider);
// appctx.putBean("authenticationManager", authMan);
this.authenticationManager = authMan;
this.setupStrategyFactory();
this.setupActionFactory();
this.setUpHive(); // this one should be called automatically ?
// Wicket markup setting.
getMarkupSettings().setStripComments(false);
getMarkupSettings().setStripWicketTags(false);
getMarkupSettings().setDefaultBeforeDisabledLink("");
getMarkupSettings().setDefaultAfterDisabledLink("");
}
@Override
protected Object getHiveKey()
{
return "test";
}
/*
* @Override public Session newSession(Request request, Response response) {
* ZeuzSession zeuzSession = new ZeuzSession(this, request); return zeuzSession; }
*/
@Override
protected void setUpHive()
{
PolicyFileHiveFactory factory = new SwarmPolicyFileHiveFactory(getActionFactory());
try
{
log.debug("realpath:" + getServletContext().getResource("."));
if (!factory.addPolicyFile(getServletContext().getResource("WEB-INF/standard.hive")))
{
log
.error("Could not add the standard.hive policy file, authorization will not work");
return;
}
}
catch (MalformedURLException e)
{
log.error(e.getMessage(), e);
}
HiveMind.registerHive(this.getHiveKey(), factory);
}
@Override
public Class< ? extends Page> getHomePage()
{
return HomePage.class;
}
/**
* Return the special test mock login page that enables the use of the ACEGI
* TestingAuthenticationProvider
*
* @return MockLoginPage page for use with the TestingAuthenticationProvider
*/
@Override
public Class< ? extends Page> getLoginPage()
{
return MockLoginPage.class;
}
/**
* authenticationManager for ACEGI. In the test setup, the manager contains the
* TestingAuthenticationProvider
*
* @return Spring Security authentication manager
*/
@Override
public AuthenticationManager getAuthenticationManager()
{
return authenticationManager;
}
@Override
@Required
public void setAuthenticationManager(AuthenticationManager authenticationManager)
{
this.authenticationManager = authenticationManager;
}
}