package com.zhitan.framework.security.single; import com.zhitan.framework.web.service.UserDetailsServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import java.util.Collections; @Component public class SingleAuthenticationProvider implements AuthenticationProvider { @Autowired private UserDetailsServiceImpl userDetailsService; /** * 认证逻辑 */ @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { SingleAuthenticationToken SingleAuthenticationToken = (SingleAuthenticationToken) authentication; String username = (String) SingleAuthenticationToken.getPrincipal(); UserDetails user = userDetailsService.loadUserByUsername(username); SingleAuthenticationToken result = new SingleAuthenticationToken(user, Collections.emptyList()); /* Details 中包含了 ip地址、 sessionId 等等属性 也可以存储一些自己想要放进去的内容 */ result.setDetails(SingleAuthenticationToken.getDetails()); return result; } /** *UserIdAuthenticationToken交给UserIdAuthenticationProvider处理 * @param aClass * @return */ @Override public boolean supports(Class aClass) { return SingleAuthenticationToken.class.isAssignableFrom(aClass); } }