我需要在Tomcat 6.0.24容器中保護簡單的Jersey RESTful API。我想使用基本身份驗證使用tomcat-users.xml
文件來定義用戶和角色(這是現在,就像我說的那麼小)。現在Jersey,Tomcat和安全註釋
,授權我希望能夠使用JSR 250註解像@RolesAllowed
,@PermitAll
,@DenyAll
等
我不能爲我的生活弄清楚如何連接這一切在一起。
我真的不想去春季安全路線,因爲我目前需要的東西很簡單。
有人能指出我正確的方向嗎?
我需要在Tomcat 6.0.24容器中保護簡單的Jersey RESTful API。我想使用基本身份驗證使用tomcat-users.xml
文件來定義用戶和角色(這是現在,就像我說的那麼小)。現在Jersey,Tomcat和安全註釋
,授權我希望能夠使用JSR 250註解像@RolesAllowed
,@PermitAll
,@DenyAll
等
我不能爲我的生活弄清楚如何連接這一切在一起。
我真的不想去春季安全路線,因爲我目前需要的東西很簡單。
有人能指出我正確的方向嗎?
您可以先使用一個涵蓋身份驗證和權限管理的過濾器開始。 通過實現ResourceFilter和ContainerRequestFilter,您可以獲得httpRequest,然後會話將您的應用程序/請求重定向到相關方法。
對於權限管理,您可以實現SecurityContext過濾器。首先要檢查isUserInRole以讓請求進入方法。
這裏是SecurityContext的實施sasmple:
public class SecurityContextImpl implements SecurityContext {
private final SessionUser user;
public SecurityContextImpl(SessionUser user) {
this.user = user;
}
public Principal getUserPrincipal() {
return user;
}
public boolean isUserInRole(String role) {
if(user == null) {
throw new AuthenticationException();
}
if(ObjectUtil.isNull(user.getPrivileges())){
throw new AuthenticationException();
}
if(!user.getPrivileges().contains(role)) {
throw new InvalidAuthorizationHeaderException();
}
return user.getPrivileges().contains(role);
}
public boolean isSecure() {
return false;
}
public String getAuthenticationScheme() {
return SecurityContext.BASIC_AUTH;
}
}
以下是基本secirtyCotnextFilter實現:
public class SecurityContextFilter implements ResourceFilter, ContainerRequestFilter {
private static final Logger LOG = LoggerFactory.getLogger(SecurityContextFilter.class);
protected static final String HEADER_AUTHORIZATION = "Authorization";
protected static final String HEADER_DATE = "x-java-rest-date";
protected static final String HEADER_NONCE = "nonce";
private HttpServletRequest httpRequest;
public SecurityContextFilter() {
}
public ContainerRequest filter(ContainerRequest request) {
SessionUser sessionUser = (SessionUser) httpRequest
.getSession()
.getAttribute("sessionUser");
request.setSecurityContext(new SecurityContextImpl(sessionUser));
return request;
}
public ContainerRequestFilter getRequestFilter() {
return this;
}
public ContainerResponseFilter getResponseFilter() {
return null;
}
public HttpServletRequest getHttpRequest() {
return httpRequest;
}
public void setHttpRequest(HttpServletRequest httpRequest) {
this.httpRequest = httpRequest;
}
}
不要fotget把你的過濾器在web.xml內的init-PARAM ,
然後,您可以使用角色特權認證邏輯處理請求。
既然你用'spring'和'spring-security'標記了這個問題,但你反而說你不想使用它,你真的在使用spring嗎?如果沒有,就把它們留下。 – BalusC 2010-02-18 23:20:05
http://stackoverflow.com/questions/16433315/can-i-use-rolesallowed-on-restful-resources-implemented-on-apache-cxf – JayTee 2014-01-17 11:36:22