unl*_*hed 3 java authentication url design-patterns
我有一个支持URLConnection的AuthenticationHandler接口,但现在我正在使用Apache HTTP Client.我想为两种连接类型(URLConnection和HTTP Client)提供一个通用的身份验证接口,但它们都有不同的参数和功能.
我该如何设计呢?战略模式是否可行?
import java.net.URLConnection;
import java.util.List;
public interface AuthenticationHandler {
/**
* this needs to be called by everyone that needs direct access to a link which may have
* security access rules.
*/
void trustAll();
/**
*
* @param URLconnection where you set access state parameters or anything access related
* @param slice where you could get access config
* @param initializeSlice is true if you want the proxy to hibernate initialize all hibernated objects
* @return
* @throws ConnectionException
*/
void authenticate(URLConnection conn) throws ConnectionException;
List<String> getSingleCookie();
void setSingleCookie(List<String> singleCookies);
CookieManager getCookieManager();
void setCookieManager(CookieManager cookieManager);
boolean isKeepGeneratedCookie();
void setKeepGeneratedCookie(boolean keepGeneratedCookie);
}
Run Code Online (Sandbox Code Playgroud)
我主要担心的是
void authenticate(URLConnection conn) throws ConnectionException;
Run Code Online (Sandbox Code Playgroud)
它最初采用URLConnection conn但现在我们也想添加对HTTP客户端的支持.
对于策略模式,您应该使用以下内容:
public class AuthenticationHandlerImpl implements AuthenticationHandler {
private Authenticator authenticator;
void authenticate() throws ConnectionException {
authenticator.authenticate();
};
public void setAuthenticator(final Authenticator authenticator){
this.authenticator = authenticator;
}
}
interface Authenticator {
void authenticate();
void setLogin(String login);
void setPassword(String password);
}
class URLAuthenticator implements Authenticator {
public void authenticate() {
//use URLConnection
};
}
class HTTPClientAuthenticator implements Authenticator {
public void authenticate() {
//use HTTPClient
};
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
AuthenticationHandler handler = new AuthenticationHandlerImpl();
Authenticator authenticator = new HTTPClientAuthenticator();
//or
//Authenticator authenticator = new URLAuthenticator();
authenticator.setLogin(...);
authenticator.setPassword(...);
handler.setAuthenticator(authenticator)
handler.authenticate();
Run Code Online (Sandbox Code Playgroud)
对于创建,Authenticator
您可以使用模式FactoryMathod:
class AuthenticatorFactory {
private AuthenticatorFactory(){}
//type of param may be enum or other
public static Authenticator createAuthenticator(... param) {
if (param == ...) {
return new URLAuthenticator();
} else if (param == ...) {
return new HTTPClientAuthenticator();
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
755 次 |
最近记录: |