Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring security Spring引导安全中基于角色的无密码内存内身份验证_Spring Security_Passwords - Fatal编程技术网

Spring security Spring引导安全中基于角色的无密码内存内身份验证

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"

我正在尝试向具有管理员/领导/代理等权限的用户授权URL。 UsernamePasswordAuthenticationToken接受两个参数,但我想传递3个args userid、密码为null和userid的角色


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();
}