錯誤原因是你可能配置多個<http>
,但配置順序錯誤。
簡單來說就是pattern
越精確(more specific)的路徑(例如/api/product/
)的<http>
應該被安排在配置文件中較前面的位置,而pattern
涵蓋範圍越大(less specific)的<http>
(例如/**
)應該安排在配置文件中較後面的位置,如果順序相反就會發生以上錯誤。
例如下面配置了三個<http>
,由上而下分別為
/api/product/
的驗證- 忽略登入頁面
login.jsp
的驗證 /**
的驗證
所以pattern
的範圍必須是從小而大,根據官方文件的說明,<http>
會依照宣告順序加入FilterChainProxy
的filter chain
...The elements will be added in the order they are declared, so the most specific patterns must again be declared first....
<!-- Stateless RESTful service using Basic authentication -->
<http pattern="/api/**" create-session="stateless">
<intercept-url pattern='/**' access="hasRole('REMOTE')" />
<http-basic />
</http>
<!-- Empty filter chain for the login page -->
<http pattern="/login.jsp" security="none"/>
<!-- Additional filter chain for normal users, matching all other requests -->
<http>
<intercept-url pattern='/**' access="hasRole('USER')" />
<form-login login-page='/login.jsp' default-target-url="/home.jsp"/>
<logout />
</http>
參考:
沒有留言:
張貼留言