Java 在服务中注入SecurityContext

Java 在服务中注入SecurityContext,java,security,jax-rs,javax,Java,Security,Jax Rs,Javax,我的应用程序设置如下: 资源 @Path("/books") public class BookResource { @Inject BookService bookService; @Context SecurityContext securityContext; @GET public Response getBooks() { List<BookDTO> books = bookService.getAllBo

我的应用程序设置如下:

资源

@Path("/books")
public class BookResource {
    @Inject
    BookService bookService;

    @Context
    SecurityContext securityContext;

    @GET
    public Response getBooks() {
        List<BookDTO> books = bookService.getAllBooks();

        return Response.ok(books).build();
    }
}
public interface BookService {
    List<BookDTO> getAllBooks();
}
public class BaseResource {

    @Context
    SecurityContext securityContext;


    public class BaseRequest {

        private Principal principal;

        public BaseRequest() {
            principal = securityContext.getUserPrincipal();
        }

        public Principal getPrincipal() {
            return principal;
        }
    }
}
public class BookResource extends BaseResource {

    @Inject
    BookService bookService;

    @Path("/{id}")
    public Response getBookById(@PathParam("id") Long id) {
        BookDTO book = bookService.getBookById(new GetBookRequest(id));

        return Response.ok(book).build();
    }

    public Response getAllBooks() {
        List<BookDTO > books = bookService.getAllBooks(new GetAllBooksRequest());

        return Response.ok(books).build();
    }

    public class GetBookRequest extends BaseRequest {

        private Long id;

        public GetBookRequest(Long id) {
            super();
            this.id = id;
        }

        public Long getId() {
            return id;
        }
    }

    public class GetAllBooksRequest extends BaseRequest {

        public GetAllBooksRequest() {
            super();
        }
    }
}
public interface BookService {

    public List<BookDTO> getAllBooks(GetAllBooksRequest request);

    public BookDTO getBookById(GetBookRequest request);
}
图书资源

@Path("/books")
public class BookResource {
    @Inject
    BookService bookService;

    @Context
    SecurityContext securityContext;

    @GET
    public Response getBooks() {
        List<BookDTO> books = bookService.getAllBooks();

        return Response.ok(books).build();
    }
}
public interface BookService {
    List<BookDTO> getAllBooks();
}
public class BaseResource {

    @Context
    SecurityContext securityContext;


    public class BaseRequest {

        private Principal principal;

        public BaseRequest() {
            principal = securityContext.getUserPrincipal();
        }

        public Principal getPrincipal() {
            return principal;
        }
    }
}
public class BookResource extends BaseResource {

    @Inject
    BookService bookService;

    @Path("/{id}")
    public Response getBookById(@PathParam("id") Long id) {
        BookDTO book = bookService.getBookById(new GetBookRequest(id));

        return Response.ok(book).build();
    }

    public Response getAllBooks() {
        List<BookDTO > books = bookService.getAllBooks(new GetAllBooksRequest());

        return Response.ok(books).build();
    }

    public class GetBookRequest extends BaseRequest {

        private Long id;

        public GetBookRequest(Long id) {
            super();
            this.id = id;
        }

        public Long getId() {
            return id;
        }
    }

    public class GetAllBooksRequest extends BaseRequest {

        public GetAllBooksRequest() {
            super();
        }
    }
}
public interface BookService {

    public List<BookDTO> getAllBooks(GetAllBooksRequest request);

    public BookDTO getBookById(GetBookRequest request);
}
公共类BookResource扩展了BaseResource{
@注入
图书服务;
@路径(“/{id}”)
公共响应getBookById(@PathParam(“id”)长id){
bookdtobook=bookService.getBookById(新的GetBookRequest(id));
返回Response.ok(book.build();
}
公众响应getAllBooks(){
List books=bookService.getAllBooks(新的GetAllBooksRequest());
返回Response.ok(books.build();
}
公共类GetBookRequest扩展了BaseRequest{
私人长id;
公共GetBookRequest(长id){
超级();
this.id=id;
}
公共长getId(){
返回id;
}
}
公共类GetAllBooksRequest扩展了BaseRequest{
公共GetAllBooksRequest(){
超级();
}
}
}
图书服务

@Path("/books")
public class BookResource {
    @Inject
    BookService bookService;

    @Context
    SecurityContext securityContext;

    @GET
    public Response getBooks() {
        List<BookDTO> books = bookService.getAllBooks();

        return Response.ok(books).build();
    }
}
public interface BookService {
    List<BookDTO> getAllBooks();
}
public class BaseResource {

    @Context
    SecurityContext securityContext;


    public class BaseRequest {

        private Principal principal;

        public BaseRequest() {
            principal = securityContext.getUserPrincipal();
        }

        public Principal getPrincipal() {
            return principal;
        }
    }
}
public class BookResource extends BaseResource {

    @Inject
    BookService bookService;

    @Path("/{id}")
    public Response getBookById(@PathParam("id") Long id) {
        BookDTO book = bookService.getBookById(new GetBookRequest(id));

        return Response.ok(book).build();
    }

    public Response getAllBooks() {
        List<BookDTO > books = bookService.getAllBooks(new GetAllBooksRequest());

        return Response.ok(books).build();
    }

    public class GetBookRequest extends BaseRequest {

        private Long id;

        public GetBookRequest(Long id) {
            super();
            this.id = id;
        }

        public Long getId() {
            return id;
        }
    }

    public class GetAllBooksRequest extends BaseRequest {

        public GetAllBooksRequest() {
            super();
        }
    }
}
public interface BookService {

    public List<BookDTO> getAllBooks(GetAllBooksRequest request);

    public BookDTO getBookById(GetBookRequest request);
}
公共接口图书服务{
公共列表getAllBooks(GetAllBooksRequest请求);
public BookDTO getBookById(GetBookRequest请求);
}
BookServiceImpl

public class BookServiceImpl implements BookService {

    @Context
    SecurityContext securityContext;

    @Override
    public List<BookDTO> getAllBooks() {
        BookDTO book1 = new BookDTO("Catcher in the Rye");
        BookDTO book2 = new BookDTO("Moby Dick");

        return Arrays.asList(new Book[]{book1,book2});
    }
}
@Named
public class BookServiceImpl implements BookService {

    @Override
    public List<BookDTO> getAllBooks(GetAllBooksRequest request) {
        Principal principal = request.getPrincipal();

        BookDTO book1 = new BookDTO();
        book1.setName("Catcher in the Rye");
        book1.setId(1L);

        BookDTO book2 = new BookDTO();
        book2.setName("Moby Dick");
        book2.setId(2L);

        return Arrays.asList( new BookDTO[]{ book1, book2 });
    }

    @Override
    public BookDTO getBookById(GetBookRequest request) {
        Principal principal = request.getPrincipal();

        BookDTO book = new BookDTO();
        book.setName("Catcher in the Rye");
        book.setId(request.getId());

        return book;
    }

}
@Named
公共类BookServiceImpl实现BookService{
@凌驾
公共列表getAllBooks(GetAllBooksRequest请求){
Principal=request.getPrincipal();
BookDTO book1=新BookDTO();
book1.setName(“麦田里的守望者”);
book1.setId(1L);
BookDTO book2=新BookDTO();
书2.集名(“白鲸”);
book2.setId(2L);
返回Arrays.asList(newbookdto[]{book1,book2});
}
@凌驾
public BookDTO getBookById(GetBookRequest请求){
Principal=request.getPrincipal();
BookDTO book=新BookDTO();
书名为“麦田里的守望者”;
book.setId(request.getId());
还书;
}
}

您使用的是什么JAX-RS实现?我使用Apache CXF和JAX-RS。作为服务器,我使用tomcat,但如果可能的话,我希望能够切换到jersey/jetty