giải pháp có thể:
- Thêm đánh chặn URL cho
/admin
đòi hỏi "ROLE_ADMIN"
- Configure thể hiện của
org.springframework.security.web.authentication.www.BasicAuthenticationFilter
để đánh chặn các URL /admin
và xác thực người dùng như ROLE_ADMIN nếu nó cung cấp các thông tin thích hợp
Cấu hình mẫu:
<security:intercept-url pattern="/admin" access="ROLE_ADMIN"/>
<bean id="basicAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName"
value="WS realm"/>
</bean>
<bean id="basicAuthenticationProcessingFilter"
class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationManager"
ref="authenticationManager"/>
<property name="authenticationEntryPoint"
ref="basicAuthenticationEntryPoint"/>
</bean>
Lưu ý: việc triển khai mặc định BasicAuthenticationFilter là một bộ lọc thụ động, tức là nó chỉ tìm tiêu đề xác thực cơ bản trong yêu cầu và nếu nó không có mặt - không làm gì cả. Nếu bạn muốn các bộ lọc để yêu cầu một cách rõ ràng xác thực cơ bản từ các khách hàng, bạn cần phải mở rộng việc thực hiện mặc định để bắt đầu để xác thực điểm vào:
public class BasicAuthenticationFilter
extends org.springframework.security.web.authentication.www.BasicAuthenticationFilter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
String header = request.getHeader("Authorization");
if ((header != null) && header.startsWith("Basic ")) {
super.doFilter(req, res, chain);
} else {
getAuthenticationEntryPoint().commence(request, response, new AuthenticationCredentialsNotFoundException("Missing credentials"));
}
}
}
Bên cạnh đó, bạn cần phải tinh chỉnh bộ lọc để áp dụng cho /admin
URL chỉ - hoặc bằng cách mã hóa cứng trong phương thức doFilter
hoặc bằng cách cung cấp một bean wrapper thích hợp.
Nguồn
2011-01-06 14:27:40
Tôi đã cố gắng tìm hiểu cách thực hiện chính xác điều này, cảm ơn vì đã chỉ ra rõ ràng! –
Bảo mật mùa xuân 3.1.0 đã được chính thức phát hành vào ngày 7/12/2011 – lrkwz
Tôi đang làm chính xác điều này và nếu tôi đăng nhập vào phần quản trị, tôi cũng đã đăng nhập vào phần người dùng nhưng không được ủy quyền (tất nhiên). Tôi nghĩ rằng điều này là do an ninh mùa xuân giữ quyền trong phiên theo một khóa. Có cách nào để cấu hình bảo mật mùa xuân cho kịch bản mà bạn có thể đăng nhập vào phần quản trị và người dùng cùng một lúc với thực thể ủy quyền khác không? –