Java OSGi中的身份验证过滤器?
我遵循本教程,我在过滤器部分 我正在使用OSGI,我不知道如何注册我的过滤器。我创建了我的过滤器,并毫无错误地构建了我的项目。我在karaf部署了我的捆绑包,但是我的@Secured服务不安全,因为没有调用筛选器 我应该在激活器中添加过滤器吗?在蓝图中?(我是osgi世界的新手) 这里是我的过滤器:Java OSGi中的身份验证过滤器?,java,jax-rs,osgi,Java,Jax Rs,Osgi,我遵循本教程,我在过滤器部分 我正在使用OSGI,我不知道如何注册我的过滤器。我创建了我的过滤器,并毫无错误地构建了我的项目。我在karaf部署了我的捆绑包,但是我的@Secured服务不安全,因为没有调用筛选器 我应该在激活器中添加过滤器吗?在蓝图中?(我是osgi世界的新手) 这里是我的过滤器: @Secured @Provider @Priority(Priorities.AUTHENTICATION) public class AuthenticationFilter implement
@Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter implements ContainerRequestFilter {
private static Logger LOGGER = LoggerFactory.getLogger(AuthenticationFilter.class);
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
LOGGER.info("[AuthenticationFilter] started");
// Get the HTTP Authorization header from the request
String authorizationHeader =
requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
// Check if the HTTP Authorization header is present and formatted correctly
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
throw new NotAuthorizedException("Authorization header must be provided");
}
// Extract the token from the HTTP Authorization header
String token = authorizationHeader.substring("Bearer".length()).trim();
try {
// Validate the token
validateToken(token);
} catch (Exception e) {
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
}
LOGGER.info("[AuthenticationFilter] ended");
}
//TODO: add the key in properties
//TODO: check the username in DB
private void validateToken(String token) throws Exception {
// Check if it was issued by the server and if it's not expired
// Throw an Exception if the token is invalid
String username = Jwts.parser()
.setSigningKey("jeSuisLaSecretPhrase,1234,ilFaudraMePlacerEnConf,Merci")
.parseClaimsJws(token)
.getBody()
.getIssuer();
if(!"admin".equals(username)){
throw new NotAuthorizedException("bad token");
}
}
}
编辑
卡拉夫无法加载“”
这是我的蓝图:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs">
<!-- Beans declaration -->
<bean id="AuthenticationServlet" class="com.mycompanie.fr.core.servlets.jaxrs.impl.AuthenticationServletImpl">
<property name="service" ref="service" />
</bean>
<service ref="AuthenticationServlet" interface="com.mycompanie.fr.core.servlets.jaxrs.AuthenticationServlet" />
<bean id="CommitmentServlet" class="com.mycompanie.fr.core.servlets.jaxrs.impl.CommitmentServletImpl">
<property name="service" ref="service" />
</bean>
<service ref="CommitmentServlet" interface="com.mycompanie.fr.core.servlets.jaxrs.CommitmentServlet" />
<!-- Dependency definition -->
<reference id="service" interface="com.mycompanie.fr.core.api.services.MainService" />
<jaxrs:providers>
<ref bean="AuthenticationFilter" />
</jaxrs:providers>
<bean id="AuthenticationFilter" class="com.mycompanie.fr.core.servlets.filter.AuthenticationFilter"/>
<web-spa xmlns="http://www.mycompanie.com/xmlns/web-spa/v1.0.0" context="/myProject">
<service ref="AuthenticationServlet" />
<service ref="CommitmentServlet" />
</web-spa>
</blueprint>
尝试添加文档中描述的过滤器
。。。
...
尝试添加文档中描述的过滤器
。。。
...
如何公开REST服务?您是否使用blueprint和CXF命名空间或其他类似于CXF DOSGi的东西?我使用blueprint您如何公开REST服务?您是否使用blueprint和CXF命名空间或类似于CXF DOSGi的其他内容?我在blueprint中使用blueprint?我在blueprint中添加了xmlns:jaxrs=“”和这些行,但现在karaf日志显示“1.8.0.SNAPSHOT正在等待命名空间处理程序[”jaxrs命名空间应该已经在您的blueprint中,因为您必须以某种方式导出服务。您可以在github或类似网站上发布完整的示例吗?我的blueprint是以EDITFrom blueprint添加的。看起来您正在使用自己的命名空间web spa发布servlet。这似乎与CXF无关,因此CXF方式添加筛选器没有任何帮助。您需要使用CXF执行所有服务,或者找到使用web spa框架添加筛选器的方法。在我的蓝图中?我在我的蓝图中添加了xmlns:jaxrs=”“和这些行,但现在karaf日志显示“1.8.0.SNAPSHOT正在等待命名空间处理程序[”jaxrs命名空间应该已经在您的blueprint中,因为您必须以某种方式导出服务。您可以在github或类似网站上发布完整的示例吗?我的blueprint是以EDITFrom blueprint添加的。看起来您正在使用自己的命名空间web spa发布servlet。这似乎与CXF无关,因此CXF方式添加筛选器没有帮助。您需要使用CXF执行所有服务,或者找到使用web spa框架添加筛选器的方法。
...
<jaxrs:providers>
<ref bean="authorizationFilter" />
</jaxrs:providers>
...
<bean id="authorizationFilter" class="com....AuthenticationFilter">