Spring security Spring引导安全中基于角色的无密码内存内身份验证
我正在尝试向具有管理员/领导/代理等权限的用户授权URL。 UsernamePasswordAuthenticationToken接受两个参数,但我想传递3个args userid、密码为null和userid的角色Spring security Spring引导安全中基于角色的无密码内存内身份验证,spring-security,passwords,Spring Security,Passwords,我正在尝试向具有管理员/领导/代理等权限的用户授权URL。 UsernamePasswordAuthenticationToken接受两个参数,但我想传递3个args userid、密码为null和userid的角色 I have application-users.txt { "users": ["userid1","userid2","userid3","userid4"], "agents": ["userid1"], "leads": ["userid2"], "admins"
I have application-users.txt
{
"users": ["userid1","userid2","userid3","userid4"],
"agents": ["userid1"],
"leads": ["userid2"],
"admins": ["userid4"]
}
@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true)
@EnableWebSecurity
@ConditionalOnWebApplication
@ConfigurationPropertiesScan("com.spectrum.sci.config")
@EnableConfigurationProperties(ApplicationClients.class)
@RequiredArgsConstructor
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
private static final Logger log = LoggerFactory.getLogger(SecurityConfiguration.class);
@Autowired
OrderDetailsUsers orderDetailsUsers;
public void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.authorizeRequests()
.antMatchers("/order/greet").hasAnyAuthority("admins","leads")
.antMatchers("/order").hasRole("agents")
.anyRequest()
.authenticated()
.and()
.httpBasic();
}
@Bean
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
final InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
log.info("Importing {} clients: " , applicationClients.getClients().toString());
AuthenticationManager authenticationManager = null;
KeyValues kvAgents = orderDetailsUsers.applicatonUsers.getAgents();
String keyAgent = kvAgents.getKey();
String[] valueAgents = kvAgents.getValues();
for (int i = 0; i < valueAgents.length ; i++) {
Authentication authentication =
new UsernamePasswordAuthenticationToken(keyAgent, null, valueAgents[i]);
SecurityContextHolder.getContext().setAuthentication(authentication);
authenticationManager.authenticate(authentication);
manager.setAuthenticationManager(authenticationManager);
}
return manager;
}
}
@Component
public class OrderDetailsUsers {
private static final Logger log = LoggerFactory.getLogger(OrderDetailsUsers.class);
private ResourceLoader resourceLoader;
//@Autowired
ApplicationUsers applicatonUsers = new ApplicationUsers();
public OrderDetailsUsers(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
@PostConstruct
public void init() {
try {
log.info("Trying to load users...");
Resource resource = resourceLoader.getResource("classpath:application-users.txt");
InputStream inputStream = resource.getInputStream();
log.info("inputStream = " + inputStream.toString());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
StringBuilder stringBuilder = new StringBuilder();
String str;
while ( (str = bufferedReader.readLine()) != null) {
stringBuilder.append(str);
}
log.info("stringBuilder = " + stringBuilder.toString());
JsonObject jsonObject = new JsonParser().parse(stringBuilder.toString()).getAsJsonObject();
JsonArray users = jsonObject.get("users").getAsJsonArray();
log.info("users = " + users.toString());
String[] strUsersArray = toStringArray(users);
KeyValues kvUsers = new KeyValues();
kvUsers.setKey("users");
kvUsers.setValues(strUsersArray);
applicatonUsers.setUsers(kvUsers);
log.info("final users = " + applicatonUsers.getUsers().toString());
JsonArray agents = jsonObject.get("agents").getAsJsonArray();
log.info("agents = " + agents.toString());
String[] strAgentsArray = toStringArray(agents);
KeyValues kvAgents = new KeyValues();
kvAgents.setKey("agents");
kvAgents.setValues(strAgentsArray);
applicatonUsers.setAgents(kvAgents);
log.info("final Agents = " + applicatonUsers.getAgents().toString());
JsonArray leads = jsonObject.get("leads").getAsJsonArray();
log.info("leads = " + leads.toString());
String[] strLeadsArray = toStringArray(leads);
KeyValues kvLeads = new KeyValues();
kvLeads.setKey("leads");
kvLeads.setValues(strLeadsArray);
applicatonUsers.setLeads(kvLeads);
log.info("final leads = " + applicatonUsers.getLeads().toString());
JsonArray admins = jsonObject.get("admins").getAsJsonArray();
log.info("admins = " + admins.toString());
String[] strAdminsArray = toStringArray(admins);
KeyValues kvAdmins = new KeyValues();
kvAdmins.setKey("admins");
kvAdmins.setValues(strAdminsArray);
applicatonUsers.setAdmins(kvAdmins);
log.info("final admins = " + applicatonUsers.getAdmins().toString());
} catch(IOException | NullPointerException e) {
log.error("Failing to load users..." , e);
}
}
public static String[] toStringArray(JsonArray jsonArray) {
if (jsonArray == null)
return null;
String[] strArray = new String[jsonArray.size()];
for ( int i =0; i < strArray.length ; i++) {
strArray[i] = jsonArray.get(i).getAsString();
}
return strArray;
}
}
@Getter
@Setter
@ToString
public class ApplicationUsers {
private KeyValues users;
private KeyValues agents;
private KeyValues leads;
private KeyValues admins;
}
@Getter
@Setter
@ToString
public class KeyValues {
private String key;
private String[] values;
}
我有application-users.txt
{
“用户”:[“userid1”、“userid2”、“userid3”、“userid4”],
“代理”:[“userid1”],
“leads”:[“userid2”],
“管理员”:[“userid4”]
}
@配置
@EnableGlobalMethodSecurity(securedEnabled=true)
@启用Web安全性
@条件性网络应用
@ConfigurationPropertiesScan(“com.spectrum.sci.config”)
@EnableConfigurationProperties(ApplicationClient.class)
@所需参数构造函数
公共类安全配置扩展了WebSecurity配置适配器{
私有静态最终记录器log=LoggerFactory.getLogger(SecurityConfiguration.class);
@自动连线
OrderDetailsUsers OrderDetailsUsers;
public void configure(HttpSecurity-HttpSecurity)引发异常{
httpSecurity
.授权请求()
.antMatchers(“/order/greet”).hasAnyAuthority(“管理员”、“领导”)
.antMatchers(“/order”).hasRole(“代理”)
.anyRequest()
.authenticated()
.及()
.httpBasic();
}
@豆子
public InMemoryUserDetailsManager InMemoryUserDetailsManager(){
final InMemoryUserDetailsManager=new InMemoryUserDetailsManager();
log.info(“导入{}clients:,applicationClients.getClients().toString());
AuthenticationManager AuthenticationManager=null;
KeyValues kvAgents=orderDetailsUsers.ApplicationUsers.getAgents();
String keyAgent=kvAgents.getKey();
字符串[]valueAgents=kvAgents.getValues();
对于(int i=0;i
乌尔纳
@Bean
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
List<UserDetails> listOfUserDetails = new ArrayList<>();
listOfUserDetails.add(User.withUsername("userName").password(passwordEncoder().encode("pass"))
.roles("ADMIN", "LEAD","AGENT").build());
return new InMemoryUserDetailsManager(listOfUserDetails);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.userDetailsService(inMemoryUserDetailsManager());
}
@Bean
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
final InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
KeyValues kvAgents = orderDetailsUsers.applicatonUsers.getAgents();
String keyAgent = kvAgents.getKey();
String[] valueAgents = kvAgents.getValues();
for (int i = 0; i < valueAgents.length ; i++) {
manager.createUser(User.withUsername(valueAgents[i])
.password(passwordEncoder().encode(""))
.roles(keyAgent)
.build());
}
KeyValues kvAdmins = orderDetailsUsers.applicatonUsers.getAdmins();
String keyAdmin = kvAdmins.getKey();
String[] valueAdmins = kvAdmins.getValues();
for (int i = 0; i < valueAdmins.length ; i++) {
manager.createUser(User.withUsername(valueAdmins[i])
.password(passwordEncoder().encode(""))
.roles(keyAdmin)
.build());
}
KeyValues kvLeads = orderDetailsUsers.applicatonUsers.getLeads();
String keyLead = kvLeads.getKey();
String[] valueLeads = kvLeads.getValues();
for (int i = 0; i < valueLeads.length ; i++) {
manager.createUser(User.withUsername(valueLeads[i])
.password(passwordEncoder().encode(""))
.roles(keyLead)
.build());
}
return manager;
}
private PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}