我對構建的Jersey/Spring RESTful Web應用程序有問題。我想使用@PreAuthorize註釋來保護我的端點。但是,我需要訪問UriInfo,因爲我使用查詢參數。Spring Security @PreAuthorize打破Jersey @Context UriInfo注入
一切工作正常,直到我確保方法,然後突然我的UriInfo爲空。我相當肯定這與@PreAuthorize如何導致事物被限定範圍有關 - 不再處於請求級別。
@Component
@Path("/equipment")
public class Equipment
{
@Context
UriInfo ui;
@PreAuthorize("hasAnyRole('ROLE_ANALYST', 'ROLE_DEVELOPER')")
@GET
@Produces(MediaType.APPLICATION_JSON)
public def list() {
println ui
return [:]
}
}
下面的簡單類將打印「null」。
如果刪除@PreAuthorize註解,你會得到預期的結果 - [email protected]
基於事情我已經在其他問題見過,讓我在說推進我的應用程序上下文已經有這樣一行:
<security:global-method-security pre-post-annotations="enabled"/>
和授權部分工作完美。這只是UriInfo的注入失敗。
我使用Spring 3.1.4和Jersey 2.3。提供的代碼在Groovy中,但這不是問題。
謝謝你的幫助。
我認爲它是導致問題的bean範圍,我可能會脫離基礎。我使用了@Scope(「request」),並用println確認了每次請求都會得到一個新的設備實例,但UriInfo仍然爲空。嘗試它作爲會話範圍,同一個實例,仍然爲空。我可能會在這裏咆哮錯誤的樹。 – JSager