WsuIdAllocator.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.security.message;
- import org.apache.xml.security.stax.impl.util.IDGenerator;
- import com.fasterxml.uuid.Generators;
- import com.fasterxml.uuid.impl.RandomBasedGenerator;
- /**
- * WsuIdAllocator
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class WsuIdAllocator implements org.apache.wss4j.dom.WsuIdAllocator {
-
- private static String secureRandomAlgorithm = null;
- public static String getSecureRandomAlgorithm() {
- return secureRandomAlgorithm;
- }
- public static void setSecureRandomAlgorithm(String secureRandomAlgorithm) {
- WsuIdAllocator.secureRandomAlgorithm = secureRandomAlgorithm;
- }
- private static ThreadLocal<RandomBasedGenerator> randomBasedGeneratorThreadLocal = new ThreadLocal<RandomBasedGenerator>();
- public static RandomBasedGenerator getRandomBasedGenerator() {
- if(secureRandomAlgorithm==null) {
- return null;
- }
- RandomBasedGenerator randomGenerator = randomBasedGeneratorThreadLocal.get();
- if(randomGenerator==null) {
- try {
- randomGenerator = Generators.randomBasedGenerator(java.security.SecureRandom.getInstance(secureRandomAlgorithm));
- randomBasedGeneratorThreadLocal.set(randomGenerator);
- }catch(Throwable t) {
- System.out.println("Inizializzazione RandomBasedGenerator fallita: "+t.getMessage());
- t.printStackTrace(System.out);
- }
- }
- return randomGenerator;
- }
- public static void removeRandomBasedGenerator() {
- if(randomBasedGeneratorThreadLocal!=null) {
- randomBasedGeneratorThreadLocal.remove();
- }
- }
-
-
-
- private String prefixComponent;
-
- public WsuIdAllocator(String prefix){
- this.prefixComponent=prefix;
- }
-
- @Override
- public String createId(String prefix, Object o) {
- RandomBasedGenerator generator = null;
- if(secureRandomAlgorithm!=null) {
- generator = getRandomBasedGenerator();
- }
- if(generator!=null) {
- return _generateID(generator, prefix);
- }
- else {
- if (prefix == null) {
- return IDGenerator.generateID(this.prefixComponent);
- }
-
- return IDGenerator.generateID(this.prefixComponent+prefix);
- }
- }
- @Override
- public String createSecureId(String prefix, Object o) {
- RandomBasedGenerator generator = null;
- if(secureRandomAlgorithm!=null) {
- generator = getRandomBasedGenerator();
- }
- if(generator!=null) {
- return _generateID(generator, prefix);
- }
- else {
- if (prefix == null) {
- return IDGenerator.generateID(this.prefixComponent);
- }
-
- return IDGenerator.generateID(this.prefixComponent+prefix);
- }
- }
- private static String _generateID(RandomBasedGenerator generator, String prefix) {
- // Implementazione uguale a quella presente in org.apache.xml.security.stax.impl.util.IDGenerator, con la differenza che viene usato un RandomBasedGenerator
- String id = generator.generate().toString();
- if (prefix != null) {
- return prefix + id;
- } else {
- //always prepend a constant character to get a schema-valid id!:
- return "G" + id;
- }
- }
- }