springboot+Oauth2实现自定义AuthenticationManager和认证path

2025-05-29 0 28

本人在工作中需要构建这么一个后台框架,基于springboot,登录时认证使用自定义AuthenticationManager;同时支持Oauth2访问指定API接口,认证时的AuthenticationManager和登录规则不同。在研究了源码的基础上参考很多文章,目前基本得以解决。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94
@Configuration

public class OAuth2Configuration {

@SpringBootApplication

@RestController

@EnableResourceServer

@Configuration

@EnableAuthorizationServer

protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter implements EnvironmentAware {

private static final String ENV_OAUTH = "authentication.oauth.";

private static final String PROP_CLIENTID = "clientid";

private static final String PROP_SECRET = "secret";

private static final String PROP_TOKEN_VALIDITY_SECONDS = "tokenValidityInSeconds";

private RelaxedPropertyResolver propertyResolver;

@Autowired

private DataSource dataSource;

@Bean

public TokenStore tokenStore() {

return new JdbcTokenStore(dataSource);

}

// @Autowired

// @Qualifier("authenticationManagerBean")

// private AuthenticationManager authenticationManager;

@Autowired

@Qualifier("daoAuhthenticationOauthProvider")

private AuthenticationProvider daoAuhthenticationOauthProvider;

@Override

public void configure(AuthorizationServerEndpointsConfigurer endpoints)

throws Exception {

// @formatter:off

endpoints

.tokenStore(tokenStore())

.authenticationManager(new AuthenticationManager(){

@Override

public Authentication authenticate(Authentication authentication) throws AuthenticationException {

// TODO Auto-generated method stub

return daoAuhthenticationOauthProvider.authenticate(authentication);

}

});

// @formatter:on

}

@Override

public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

clients

.inMemory()

.withClient(propertyResolver.getProperty(PROP_CLIENTID))

.scopes("read", "write")

.authorities(Authorities.ROLE_CHANNEL.name())

.authorizedGrantTypes("password", "refresh_token")

.secret(propertyResolver.getProperty(PROP_SECRET))

.accessTokenValiditySeconds(propertyResolver.getProperty(PROP_TOKEN_VALIDITY_SECONDS, Integer.class, 1800));

}

@Override

public void setEnvironment(Environment environment) {

this.propertyResolver = new RelaxedPropertyResolver(environment, ENV_OAUTH);

}

@Configuration

@EnableResourceServer

protected static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {

@Override

public void configure(HttpSecurity http) throws Exception {

http

.antMatcher("/api/dev/**")

.authorizeRequests()

.anyRequest()

.hasRole("DEVELEPOR")

.and()

.antMatcher("/api/channel/**")

.authorizeRequests()

.anyRequest()

.hasRole("CHANNEL");

}

}

}

}

以上是Oauth2的主要配置,SecurityConfiguration的配置就不贴了,大家可以去github上找资料,下面是如何自定一个daoAuhthenticationProvider。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
@Bean(name="daoAuhthenticationProvider")

public AuthenticationProvider daoAuhthenticationProvider() {

DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();

daoAuthenticationProvider.setUserDetailsService(userDetailsService);

daoAuthenticationProvider.setHideUserNotFoundExceptions(false);

daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);

return daoAuthenticationProvider;

}

@Bean(name="daoAuhthenticationOauthProvider")

public AuthenticationProvider daoAuhthenticationOauthProvider() {

DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();

daoAuthenticationProvider.setUserDetailsService(userDetailsOauthService);

daoAuthenticationProvider.setHideUserNotFoundExceptions(false);

daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);

return daoAuthenticationProvider;

}

@Override

public void configure(AuthenticationManagerBuilder auth) throws Exception {

auth.authenticationProvider(daoAuhthenticationProvider());

// auth.authenticationProvider(daoAuhthenticationProvider1());

}

@Bean

@Override

public AuthenticationManager authenticationManagerBean() throws Exception {

return super.authenticationManagerBean();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://blog.csdn.net/huhanguang89/article/details/62045095

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 springboot+Oauth2实现自定义AuthenticationManager和认证path https://www.kuaiidc.com/114915.html

相关文章

发表评论
暂无评论