Further optimizing webapp authenticator valve implementation

merge-requests/7/head
prabathabey 9 years ago
parent 28a2e918e7
commit 262e53ddcc

@ -112,7 +112,8 @@
org.apache.commons.pool.impl,
org.apache.http.client,
org.apache.http.conn,
org.apache.http.impl.client
org.apache.http.impl.client,
org.apache.http.impl.conn
</Import-Package>
</instructions>
</configuration>

@ -31,6 +31,9 @@ import org.apache.commons.pool.PoolableObjectFactory;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.wso2.carbon.identity.oauth2.stub.OAuth2TokenValidationServiceStub;
import org.wso2.carbon.webapp.authenticator.framework.authenticator.oauth.OAuthConstants;
import org.wso2.carbon.webapp.authenticator.framework.authenticator.oauth.OAuthTokenValidationException;
@ -52,12 +55,10 @@ public class OAuthTokenValidationStubFactory implements PoolableObjectFactory {
this.url = url;
this.basicAuthHeader = new String(Base64.encodeBase64((adminUsername + ":" + adminPassword).getBytes()));
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.getParams().setDefaultMaxConnectionsPerHost(
Integer.parseInt(properties.getProperty("MaxConnectionsPerHost")));
connectionManager.getParams().setMaxTotalConnections(
Integer.parseInt(properties.getProperty("MaxTotalConnections")));
this.httpClient = new DefaultHttpClient((ClientConnectionManager) connectionManager);
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setDefaultMaxPerRoute(Integer.parseInt(properties.getProperty("MaxConnectionsPerHost")));
connectionManager.setMaxTotal(Integer.parseInt(properties.getProperty("MaxTotalConnections")));
this.httpClient = HttpClients.custom().setConnectionManager(connectionManager).build();
}
@Override

@ -33,6 +33,11 @@ public class BasicAuthAuthenticator implements WebappAuthenticator {
private static final String BASIC_AUTH_AUTHENTICATOR = "BasicAuth";
@Override
public void init() {
}
@Override
public boolean canHandle(Request request) {
MessageBytes authorization =

@ -26,6 +26,11 @@ public class CertificateAuthenticator implements WebappAuthenticator {
private static final String CERTIFICATE_AUTHENTICATOR = "CertificateAuth";
private static final String CERTIFICATE_VERIFICATION_HEADER = "certificate-verification-header";
@Override
public void init() {
}
@Override
public boolean canHandle(Request request) {
String certVerificationHeader = request.getContext().findParameter(CERTIFICATE_VERIFICATION_HEADER);

@ -52,6 +52,11 @@ public class JWTAuthenticator implements WebappAuthenticator {
private static final String JWT_AUTHENTICATOR = "JWT";
private static final String JWT_ASSERTION_HEADER = "X-JWT-Assertion";
@Override
public void init() {
}
@Override
public boolean canHandle(Request request) {
String authorizationHeader = request.getHeader(JWTAuthenticator.JWT_ASSERTION_HEADER);

@ -52,16 +52,33 @@ public class OAuthAuthenticator implements WebappAuthenticator {
private static final Log log = LogFactory.getLog(OAuthAuthenticator.class);
public OAuthAuthenticator() {
@Override
public void init() {
if (properties == null) {
throw new IllegalArgumentException("Required properties needed to initialize OAuthAuthenticator are " +
"not provided");
}
String url = properties.getProperty("TokenValidationEndpointUrl");
if (url == null || url.isEmpty()) {
throw new IllegalArgumentException("OAuth token validation endpoint url is not provided");
}
String adminUsername = properties.getProperty("Username");
if (adminUsername == null) {
throw new IllegalArgumentException("Username to connect to the OAuth token validation endpoint is " +
"not provided");
}
String adminPassword = properties.getProperty("Password");
if (adminPassword == null) {
throw new IllegalArgumentException("Password to connect to the OAuth token validation endpoint is " +
"not provided");
}
boolean isRemote = Boolean.parseBoolean(properties.getProperty("IsRemote"));
Properties validatorProperties = new Properties();
validatorProperties.setProperty("MaxTotalConnections", properties.getProperty("MaxTotalConnections"));
validatorProperties.setProperty("MaxConnectionsPerHost", properties.getProperty("MaxTotalConnectionsPerHost"));
this.tokenValidator = OAuthValidatorFactory.getNewValidator(url, adminUsername, adminPassword, isRemote, validatorProperties);
validatorProperties.setProperty("MaxConnectionsPerHost", properties.getProperty("MaxConnectionsPerHost"));
this.tokenValidator =
OAuthValidatorFactory.getNewValidator(url, adminUsername, adminPassword, isRemote, validatorProperties);
}
@Override

@ -30,6 +30,8 @@ public interface WebappAuthenticator {
SUCCESS, FAILURE, CONTINUE
}
void init();
boolean canHandle(Request request);
AuthenticationInfo authenticate(Request request, Response response);

@ -18,10 +18,7 @@
*/
package org.wso2.carbon.webapp.authenticator.framework.config;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlRootElement(name = "Authenticator")
@ -55,6 +52,10 @@ public class AuthenticatorConfig {
return params;
}
public void setParams(List<Parameter> params) {
this.params = params;
}
@XmlRootElement(name = "Parameter")
public static class Parameter {
private String name;
@ -69,7 +70,7 @@ public class AuthenticatorConfig {
this.name = name;
}
@XmlElement(name = "Value")
@XmlValue
public String getValue() {
return value;
}

@ -80,13 +80,14 @@ public class WebappAuthenticatorFrameworkServiceComponent {
for (AuthenticatorConfig config : WebappAuthenticatorConfig.getInstance().getAuthenticators()) {
WebappAuthenticator authenticator = (WebappAuthenticator) Class.forName(config.getClassName()).
newInstance();
if (config.getParams() != null || !config.getParams().isEmpty()) {
if (config.getParams() != null && !config.getParams().isEmpty()) {
Properties properties = new Properties();
for (AuthenticatorConfig.Parameter param : config.getParams()) {
properties.setProperty(param.getName(), param.getValue());
}
authenticator.setProperties(properties);
}
authenticator.init();
repository.addAuthenticator(authenticator);
}
AuthenticatorFrameworkDataHolder.getInstance().setWebappAuthenticatorRepository(repository);

@ -3,6 +3,14 @@
<Authenticator>
<Name>OAuth</Name>
<ClassName>org.wso2.carbon.webapp.authenticator.framework.authenticator.OAuthAuthenticator</ClassName>
<Parameters>
<Parameter Name="TokenValidationEndpointUrl">https://localhost:9443</Parameter>
<Parameter Name="Username">admin</Parameter>
<Parameter Name="Password">admin</Parameter>
<Parameter Name="IsRemote">true</Parameter>
<Parameter Name="MaxConnectionsPerHost">10000</Parameter>
<Parameter Name="MaxTotalConnections">10000</Parameter>
</Parameters>
</Authenticator>
<Authenticator>
<Name>BasicAuth</Name>

Loading…
Cancel
Save