Oauth2和SpringBo

由于项目中用到Oauth2,所以在SpringBoot中需要配置相关的依赖和内容.


一,配置文件.

1,首先在配置文件中打上注解.

@Configuration
@EnableAuthorizationServer  


2,定义配置文件 Auth2Config,因为需要进行初始化所以必须继承 类AuthorizationServerConfigurerAdapter

顺便声明了如下的两个框架类对象.

    private final UserDetailsService userDetailsService;
    private final AuthenticationManager authenticationManager;

3,由于2的继承,它里面有三个配置方法,我们需要实现他们.



    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
    }


    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    }


    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    }


如下是具体的实现细节.


    @Override
    public void configure(AuthorizationServerEndpointsConfigurer configurer) throws Exception {
        configurer
                .authenticationManager(authenticationManager)
                .userDetailsService(userDetailsService)
                .reuseRefreshTokens(false);
    }


    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("dashboard")
                .secret("secret")
                .accessTokenValiditySeconds(accessTokenExpireIn)
                .refreshTokenValiditySeconds(0)
                .scopes("read", "write")
                .authorizedGrantTypes("password", "refresh_token")
                .resourceIds("resource");
    }


    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security
                .allowFormAuthenticationForClients()
                .checkTokenAccess("isAuthenticated()");
    }


ps:

在其中有定义些常量.

    @Value("${custom.oauth.accessTokenExpireIn:3600}")
    private int accessTokenExpireIn;
    @Value("${custom.oauth.refreshTokenExpireIn:86400}")
    private int refreshTokenExpireIn;




二,框架中接口和相关类的调用和定义.


public interface AuthenticationFacade {
    Authentication getAuthentication();


    SecurityUserDetails getUserDetails();
}


@Service
public class SecurityAuthenticationFacade implements AuthenticationFacade {
    @Override
    public Authentication getAuthentication() {
        return SecurityContextHolder.getContext().getAuthentication();
    }


    @Override
    public SecurityUserDetails getUserDetails() {
        return (SecurityUserDetails) getAuthentication().getPrincipal();
    }
}


以上两个类是父子类.



public class SecurityUserDetails implements UserDetails {
    private static final long serialVersionUID = 1461684639991221787L;


    private User user;


    public SecurityUserDetails(User user) {
        this.user = user;
    }


    public User getUser() {
        return user;
    }


    public String getUserId() {
        return user.getId();
    }


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return Collections.emptyList();
    }


    @Override
    public String getPassword() {
        return user.getPassword();
    }


    @Override
    public String getUsername() {
        return user.getEmail();
    }


    @Override
    public boolean isAccountNonExpired() {
        return true;
    }


    @Override
    public boolean isAccountNonLocked() {
        return !user.getLocked();
    }


    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }


    @Override
    public boolean isEnabled() {
        return !user.getLocked();
    }
}




@Service("securityUserDetailsService")
public class SecurityUserDetailsService implements UserDetailsService {
    private final UserService userService;


    @Autowired
    public SecurityUserDetailsService(UserService userService) {
        this.userService = userService;
    }


    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userService.findByEmail(username);
        return new SecurityUserDetails(user);
    }
}













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值