ContainerRequestFilter中设置的ContainerRequestContext属性返回null,为什么?

时间:2015-12-02 13:42:38

标签: java jax-rs

这是我的身份验证过滤器:

 public class AuthenticationFilter implements ContainerRequestFilter {

    private static Logger logger = LoggerFactory.getLogger(AuthenticationFilter.class);

    @Autowired
    private AuthenticationService service;

    @Override
    public void filter(ContainerRequestContext context) throws IOException {
        String token = context.getHeaderString("mytoken");

        if (token == null || token.isEmpty()) {
            String message = "token.null_empty";
            logger.warn("{}: Token is required to access to personal data (resource {}) => reject request", message, context.getUriInfo().getBaseUri());
            throw new AuthenticationException(ErU2, message);
        }

        // check token and retrieve user information
        logger.debug("Checking validity of token {}", token);
        IUser user = this.service.getUser(token);

        logger.warn("======= AuthenticationFilter#filter token={}, user={}", token, user);

        // set user data as request property


            context.setProperty("user", user);



        logger.warn("======= AuthenticationFilter#filter token={}, user#context.setProperty={}", token, (IUser) context.getProperty("user"));//In this line ihave user not null
    }
}


@Path("perso")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
@Component
public class PersonalSpace {
    private static Logger logger LoggerFactory.getLogger(PersonalSpace.class);

    @Context
    private ContainerRequestContext context;


    private IUser getUser() {
        logger.debug("[IN] PersonalSpace#getUser");

        IUser user = (IUser) this.context.getProperty("user");//This returns null

        logger.warn("======= PersonalSpace#getUser user={}", user);

        return user;
    }

    @GET
    @Path("/skanso/data")
      public Response getData(@QueryParam("start") Integer start, @QueryParam("number") Integer number,
        List<Integer> ids) {
    return dataOperator.getDataLimitedList(getUser(), start, number, ids);
}


}

当我使用单个请求进行测试时,此代码可以很好地工作,但是在并发请求时,this.context.getProperty(“user”)返回null。

是否有解决方案threadSafe或类似的东西?

请保存我的头发:)

0 个答案:

没有答案