猿问

如何访问在 web api 方法中的 ResourceFilter 中生成的对象

我有一个在查询字符串中有一个令牌的 Web 方法,每个方法都使用这个令牌来识别请求的用户。


为此,我创建了一个名称为 AuthenticationFilter 的 ResourceFilter,它从请求中获取令牌并从数据库中检索用户信息,如果用户有效,则允许执行该方法,否则会引发未授权异常。


我的问题是:如何访问在 AuthenticationFilter 类中检索到的用户信息


我的网络API:


@GET

@Consumes(MediaType.TEXT_PLAIN)

@Produces({MediaType.APPLICATION_JSON})

@Path("/getUserOrders")

@ResourceFilters({AuthenticationFilter.class, AllowOroginFilter.class})

public String getUserOrders(@Context UriInfo uriInfo) {

    //I need to access Usr object that retrived in AuthenticationFilter

    /*User Usr = AuthenticationFilter.Usr;*/

    String Result = getUserOrders(Usr);

    return Result;

}

资源过滤器代码:


public class AuthenticationFilter implements ResourceFilter, ContainerRequestFilter, ContainerResponseFilter {

        public User usr = null;

        @Override

        public ContainerRequest filter(ContainerRequest containerRequest) {

            usr = AuthenticationUtiity.AuthenticateRequest(containerRequest);

            if(usr == null){

                Response.ResponseBuilder builder = null;

                String response = "{\"Success\":false, \"Message\":\"Invalid username or password\"}";

                builder = Response.status(Response.Status.UNAUTHORIZED).entity(response);

                throw new WebApplicationException(builder.build());

            }

            return containerRequest;

        }

    }

我在谷歌上搜索并找到了一种方法可以使用 ThreadLocal 并将用户保存到 ThreadLocal 并在该线程中的任何位置获取它。


https://veerasundar.com/blog/2010/11/java-thread-local-how-to-use-and-code-sample/


有没有更简单的方法来做到这一点?谢谢


Qyouu
浏览 203回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答