2017-05-04 6 views
0

저지를 사용하는 데모 JAX-RS 프로젝트가 있습니다. 이제 스프링 보안의 메소드 레벨 보안을 추가하려고 시도하지만 불행히도 intercept-url xml 방식이 정상적으로 작동하지만 작동하지 않습니다. web.xml/WEB-INF/security.xmlJersey 프로젝트에서 Spring Security를 ​​통합하는 동안 @Secured가 작동하지 않습니다.

<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/security 
http://www.springframework.org/schema/security/spring-security.xsd"> 
    <!-- kind of authentication applied 1) Basic 2) form-based etc.. auto-config="true" use-expressions="true"--> 
    <http auto-config="true"> 
     <http-basic /> 
    </http> 

    <!-- this allow to enable security annotations in restful resoruces --> 
    <global-method-security secured-annotations="enabled" /> 

    <!-- for defining users and roles --> 
    <authentication-manager> 
     <authentication-provider> 
      <user-service> 
       <user name="admin" password="admin" authorities="ROLE_CUSTOMER,ROLE_ADMIN"/> 
       <user name="student" password="student" authorities="ROLE_CUSTOMER"/> 
      </user-service> 
     </authentication-provider> 
    </authentication-manager> 
</beans:beans> 
  • 업데이트

    <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value> 
        /WEB-INF/security.xml, 
        /WEB-INF/beans.xml 
    </param-value> 
    </context-param> 
    <!-- this is default security impl name used by deletetingFiterProxy --> 
    <filter> 
        <filter-name>springSecurityFilterChain</filter-name> 
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
        <filter-name>springSecurityFilterChain</filter-name> 
        <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    
  • 로 주석 달기 서비스 inteface을 방법

    업데이트 내 pom.xml
  • 에서

    1. 추가 된 모든 종속성
      public interface StudentServiceInterface { 
      
          @GET 
          @Path("/students") 
          @Secured("ROLE_CUSTOMER") 
          public Response getStudents(); 
      
          @GET 
          @Path("/students/{id}") 
          @Secured("ROLE_CUSTOMER") 
          public Response getStudent(@PathParam("id") int id); 
      
          @POST 
          @Path("/students") 
          @Consumes(MediaType.APPLICATION_JSON) 
          @Secured("ROLE_ADMIN") 
          public Response addStudent(Student stu); 
      } 
      

    는 지금은 비밀번호를 묻지 않고이 열립니다 자원 학생 (/student) 클래스에 액세스하려고 할 때.

    http://localhost:3126/securitydemo/webapi/db/students 
    

    StudentServiceInterface 인터페이스 구현 당신은 봄 DI의 확장자를 사용할 필요가

    @Path("/db") 
    @Produces(MediaType.APPLICATION_JSON) 
    public class StudentService implements StudentServiceInterface{ 
    
        static StudentDao data= new StudentDaoImpl(); 
    
        @Override 
        public Response getStudents(){ 
         GenericEntity<List<Student>> entity = new GenericEntity<List<Student>>(data.getAllStudents()){}; 
         return Response.ok(entity).build(); 
        } 
    
        @Override 
        public Response getStudent(@PathParam("id") int id){ 
         return Response.ok(data.getStudent(id)).build(); 
        } 
    
    
        @Override 
        public Response addStudent(Student stu) { 
         data.addStudent(stu); 
         return Response.ok(stu).build(); 
        } 
    
    } 
    
  • +1

    저지 버전 2.25.1 –

    답변

    1

    , Jersey 2.25.1 User Guide를 참조하십시오

    뉴저지 스프링 DI를 지원하는 확장 기능을 제공합니다. 이를 통해 Jersey는 Spring Bean을 JAX-RS 구성 요소 (예 : 자원 및 공급자)로 사용할 수 있으며 Spring이 Jersey 관리 구성 요소에 주입 할 수 있습니다.

    스프링 확장 모듈 구성은 주석을 기반으로합니다. 스프링 빈이 주입되고 JAX-RS 클래스는 주석을 사용하여 스프링 관리된다. 삽입 된 Spring Bean은 Spring XML 설정을 사용하여 추가 종속성을 주입 할 수 있습니다. 스프링 싱글 톤 및 요청 범위가 지원됩니다.

    JAX-RS 리소스가 Spring 트랜잭션 관리 (@Transactional 포함), 스프링 보안 및 @Aspect와 같은 애스펙트 지향 프로그래밍과 같이 프록시를 필요로하는 Spring 기능을 작동하게하려면 Spring 자체에서 리소스를 관리해야합니다 , @Component, @Service, @Controller 또는 @Repository으로 주석에 의해 :

    import javax.ws.rs.GET; 
    import javax.ws.rs.Path; 
    import org.springframework.stereotype.Component; 
    
    @Component 
    @Path("/") 
    public class SomeResource { 
    
        @Transactional 
        @GET 
        public void updateResource() { 
         // ... 
        } 
    } 
    

    한계 :

    스프링 빈 스프링 XML 구성

    를 사용하여 JAX-RS 클래스들로 직접 분사 될 수 없다

    25.1. 종속성

    당신이 당신의 종속성 목록에 저지-spring3 모듈을 추가해야합니다 뉴저지 봄 DI 지원을 사용하려면 :

    <dependency> 
        <groupId>org.glassfish.jersey.ext</groupId> 
        <artifactId>jersey-spring3</artifactId> 
        <version>2.25.1</version> 
    </dependency> 
    

    위의 모듈은 스프링 모듈에 이적 종속성을 추가합니다. 종속성 목록 및 범위에 대한 자세한 내용은 jersey-spring3 모듈 종속성을 참조하십시오.이 모듈은 HK2 서비스에 Spring 서비스를 주입하거나 Spring 서비스에 HK2 서비스를 주입하는 데 사용되는 Spring/HK2 Bridge에 의존한다는 점에 유의하십시오.