2017-05-04 84 views
-1

我正在設計一組用於訪問URL的REST API。按我的要求有兩個網址:REST URL的攔截URL模式

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

查看所有不需要的訪問學生和

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

ROLE_USER是允許的。

我的春天安全配置:

<http auto-config="true" use-expressions="true"> 
    <intercept-url pattern="**/students/*" access="hasRole('ROLE_USER')" /> 
    <http-basic/> 
</http> 

如果我使用模式**/students/*沒有基本的安全彈出窗口出現。如果我使用/**它正常工作。

如何攔截具有不同安全級別的兩個網址?

我的REST服務類:

@Path("/db") 
@Produces(MediaType.APPLICATION_JSON) 
public class StudentService { 
    static StudentDao data = new StudentDaoImpl(); 
    @Path("/students") 
    @GET 
    public Response getStudents(){ 
     GenericEntity<List<Student>> entity = new GenericEntity<List<Student>>(data.getAllStudents()){}; 
     return Response.ok(entity).build(); 
    } 

    @Path("/students/{id}") 
    @GET 
    public Response getStudent(@PathParam("id") int id){ 
     return Response.ok(data.getStudent(id)).build(); 
    } 
} 
+2

的可能的複製(http://stackoverflow.com/questions/43704389/antmatchers [antMatchers該路徑的任何開頭匹配] -that-matches-any-beginning-of-path) – dur

+0

你缺少一個'/'。試試'/ **/students/*'。 – dur

回答

-2

試試這個

<http auto-config="true" use-expressions="true"> 
     <intercept-url pattern="/securitydemo/webapi/db/students/1/**" access="hasRole('ROLE_USER')" /> 
     <http-basic/> 
    </http> 
+1

/Students/1 here 1是一個路徑變量,它不是固定的 –

+0

你不能使用spring安全性try方法級別註釋@PreAuthorize(「permitAll()」)和@PreAuthorize(「hasRole('ROLE_USER')」) –