tôi cần an ninh của tôi để có logic sau đây:Tuỳ mùa xuân Filters 3.0 An ninh, Nhiều điểm nhập, AuthenticationProvider
- Kiểm tra sự hiện diện của một tham số tiêu đề
- Tùy thuộc vào sự hiện diện của paremeter làm hoặc là một chuyển hướng đến trang đăng nhập (nếu không được xác thực) hoặc kiểm tra mã xác thực cơ bản
Trong cả hai trường hợp, tôi có cùng nhà cung cấp xác thực nhưng tôi không thể làm việc đó. Các entrypoint ủy thác hoạt động tốt, nhưng tôi không bao giờ nhận được vào authenticationprovider tùy chỉnh của tôi ...
Dưới đây là cấu hình an ninh của tôi:
<security:global-method-security
secured-annotations="enabled" />
<security:http entry-point-ref="delegatingAuthenticationEntryPoint"
use-expressions="true" auto-config="false">
<!-- <security:custom-filter position="FORM_LOGIN_FILTER" -->
<!-- ref="usernamePasswordAuthenticationFilter" /> -->
<!-- <security:custom-filter position="BASIC_AUTH_FILTER" -->
<!-- ref="basicAuthenticationFilter" /> -->
<security:intercept-url pattern="/login*"
filters="none" />
<security:intercept-url pattern="/portimaLogin*"
filters="none" />
<security:intercept-url pattern="/**"
access="isAuthenticated()" />
</security:http>
<bean id="delegatingAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint">
<constructor-arg>
<map>
<entry key="hasHeader('portima','true')" value-ref="PortimaLoginUrlAuthenticationEntryPoint" />
</map>
</constructor-arg>
<property name="defaultEntryPoint" ref="authenticationEntryPoint" />
</bean>
<bean id="usernamePasswordAuthenticationFilter"
class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
</bean>
<bean id="basicAuthenticationFilter"
class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
</bean>
<bean id="PortimaLoginUrlAuthenticationEntryPoint"
class="be.ap.common.security.spring.PortimaLoginUrlAuthenticationEntryPoint">
<property name="loginFormUrl" value="${portima.login.page}" />
</bean>
<bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName" value="AP" />
</bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider
ref="authenticationProvider" />
</security:authentication-manager>
<bean id="authenticationProvider" class="be.ap.common.security.spring.APAuthenticationProvider" />
<bean id="userDetailsService" class="be.ap.common.security.spring.APUserDetailsService" />
Bất kỳ ý tưởng?
Trình xác thực tùy chỉnh của bạn có thực hiện đúng phương thức 'supports()' không? Nếu nó trả về false cho lớp 'UsernamePasswordAuthenticationToken', thì nó sẽ không bao giờ được yêu cầu xử lý mã thông báo xác thực được tạo bởi các bộ lọc của bạn. – zagyi
Nó thậm chí không đi theo phương thức hỗ trợ ... –
@Override hỗ trợ boolean công khai (Lớp Mở rộng đối tượng> xác thực) { trả về Tên người dùngPasswordAuthenticationToken.class.isAssignableFrom (xác thực); } –