Java – no authenticationprovider found usernamepasswordauthenticationtoken
•
Java
My web XML configuration is
<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Here is my security configuration
<intercept-url pattern="/*" access="ROLE_USER" /> <intercept-url pattern="/*.ico" filters="none" /> </http> <beans:bean id="customAuthenticationProvider" class="net.spring3.provider.MyAuthProvider" /> <authentication-manager> <authentication-provider ref="customAuthenticationProvider" /> </authentication-manager>
This is my customauthprovider class
public class MyAuthProvider implements AuthenticationProvider { @Override public boolean supports(Class<? extends Object> arg0) { // TODO Auto-generated method stub return false; } @SuppressWarnings("serial") private static Map<String,String> SIMPLE_USERS = new HashMap<String,String>(2) {{ put("joe","joe"); put("bob","bob"); }}; @SuppressWarnings("serial" ) private static List<GrantedAuthority> AUTHORITIES = new ArrayList<GrantedAuthority>(1) {{ add(new GrantedAuthorityImpl("ROLE_USER")); }}; @Override public Authentication authenticate(Authentication auth) throws AuthenticationException { // All your user authentication needs System.out.println("==Authenticate Me=="); if (SIMPLE_USERS.containsKey(auth.getPrincipal()) && SIMPLE_USERS.get(auth.getPrincipal()).equals(auth.getCredentials())) { return new UsernamePasswordAuthenticationToken(auth.getName(),auth.getCredentials(),AUTHORITIES); } throw new BadCredentialsException("Username/Password does not match for " + auth.getPrincipal()); } }
This page displays the login form. When I enter Bob and Bob as login, the following error will be raised
Your login attempt was not successful,try again. Reason: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken
I check the log at the debug level all. Here is what I get
FINE: Request is to process authentication Nov 17,2011 5:37:36 AM org.springframework.context.support.AbstractApplicationContext publishEvent FINEST: Publishing event in Root WebApplicationContext: org.springframework.security.authentication.event.AuthenticationFailureProviderNotFoundEvent[source=org.springframework.security.authentication.UsernamePasswordAuthenticationToken@ffff8dfd: Principal: sd; Credentials: [PROTECTED]; Authenticated: false; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@fffe3f86: RemoteIpAddress: 127.0.0.1; SessionId: x4lg4vtktpw9; Not granted any authorities] Nov 17,2011 5:37:36 AM org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter unsuccessfulAuthentication FINE: Authentication request Failed: org.springframework.security.authentication.ProviderNotFoundException: No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken
Does it help me?
Solution
As you have written in the comments, the problem is that you always return false in the supports () method of the automatic provider However, instead of always returning true, you should check the authentication you get:
public class MyAuthenticationProvider implements AuthenticationProvider,Serializable { @Override public boolean supports(Class<? extends Object> authentication) { return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication)); } // ... }
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码