Spring Security Oauth2 (四) 密码码模式 代码

F:.
└─java
    └─claroja
        │  Springsecurityoauth2DemoApplication.java
        │
        ├─config
        │      AuthorizationServerConfig.java
        │      ResourceServerConfig.java
        │      SecurityConfig.java
        │
        ├─controller
        │      UserController.java
        │
        └─service
                UserService.java

AuthorizationServerConfig.java

package claroja.config;

import claroja.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;


@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
    
    

	@Autowired
	private PasswordEncoder passwordEncoder;

	@Autowired
	private AuthenticationManager authenticationManager;

	@Autowired
	private UserService userService;

	@Override//密码模式需要配置
	public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
    
    
		endpoints.authenticationManager(authenticationManager)
				.userDetailsService(userService);
	 }


	@Override
	public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    
    
		clients.inMemory()
				//客户端ID
				.withClient("client")
				//秘钥
				.secret(passwordEncoder.encode("clientp"))
				//重定向地址
				.redirectUris("http://www.baidu.com")
				//授权范围
				.scopes("all")
				//模式
				.authorizedGrantTypes("authorization_code","password");
	}
}

ResourceServerConfig.java

package claroja.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
    
    

	@Override
	public void configure(HttpSecurity http) throws Exception {
    
    
		http.authorizeRequests()
				.anyRequest()
				.authenticated()
				.and()
				.requestMatchers()
				.antMatchers("/user/**");
	}
}

SecurityConfig.java

package claroja.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    

	@Override
	protected void configure(HttpSecurity http) throws Exception {
    
    
		http.authorizeRequests()
				.antMatchers("/oauth/**","/login/**","/logout/**")
				.permitAll()
				.anyRequest()
				.authenticated()
				.and()
				.formLogin()
				.permitAll()
				.and()
				.csrf().disable();
	}


	@Bean
	public PasswordEncoder passwordEncoder(){
    
    
		return new BCryptPasswordEncoder();
	}

	@Bean
	@Override
	public AuthenticationManager authenticationManagerBean() throws Exception {
    
    
		return super.authenticationManagerBean();
	}

}

UserController.java

package claroja.controller;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {
    
    

	@RequestMapping("/getCurrentUser")
	public Object getCurrentUser(Authentication authentication) {
    
    
		return authentication.getPrincipal();
	}

}

UserService.java

package claroja.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

@Service
public class UserService implements UserDetailsService {
    
    

	@Autowired
	private PasswordEncoder passwordEncoder;

	@Override
	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    
    
		String password = passwordEncoder.encode("admin");
		return new User(username, password, AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
	}
}

Springsecurityoauth2DemoApplication.java

package claroja;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Springsecurityoauth2DemoApplication {
    
    

	public static void main(String[] args) {
    
    
		SpringApplication.run(Springsecurityoauth2DemoApplication.class, args);
	}

}

猜你喜欢

转载自blog.csdn.net/claroja/article/details/114556245