Kategorie: Spring

Ladebalken mit Spring MVC & DWR

Da es nicht so richtig gute Tutorials zu demThema gibt, hab ich mir aus unterschiedlichen Tutorials was zusammengestrickt:
(Leider weiß ich die Autoren nicht mehr, sonst hätte ich sie hier natürlich erwähnt!)

Hier der Controller für die Uploadseite:

public class DocumentUploadController
{
	 
	private AjaxMultiPartResolver multiPartResolver;
	 
	@Override
	protected ModelAndView onSubmit(HttpServletRequest request,
	    HttpServletResponse response, Object command, BindException errors)
	    throws Exception
	{
	 
	    ModelAndView mv = new ModelAndView(new RedirectView(getSuccessView()));
	 
	        MultipartHttpServletRequest req = multiPartResolver.resolveMultipart(request);
	        MultipartFile file  = req.getFile("file");
	 
	        //save file
	        return mv;
	}
}

Hier der MultiPartResolver:

public class AjaxMultiPartResolver extends CommonsMultipartResolver
{
	private FileUploadListener fileUploadListener;

	@Override
	public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request)
			throws MultipartException
	{
		String encoding 		= determineEncoding(request);
		FileUpload fileUpload 	= prepareFileUpload(encoding);
		if (fileUploadListener != null)
		{
			fileUpload.setProgressListener(fileUploadListener);
		}
		try
		{
			List fileItems 						= ((ServletFileUpload) fileUpload).parseRequest(request);
			MultipartParsingResult parsingResult 	= parseFileItems(fileItems, encoding);

			return new DefaultMultipartHttpServletRequest(request, parsingResult.getMultipartFiles(), parsingResult.getMultipartParameters());
		}
		catch (FileUploadBase.SizeLimitExceededException ex)
		{
			throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);
		}
		catch (FileUploadException ex)
		{
			throw new MultipartException("Could not parse multipart servlet request", ex);
		}
	}

	public FileUploadListener getFileUploadListener()
	{
		return fileUploadListener;
	}

	public void setFileUploadListener(FileUploadListener fileUploadListener)
	{
		this.fileUploadListener = fileUploadListener;
	}
}

Hier der FileUploadListener:

public class FileUploadListener implements ProgressListener
{

	private boolean multipartFinished 		= false;
	private UploadInfoBean uploadInfoBean;

	private static long bytesTransferred 	= 0;
	private static long fileSize 			= -100;
	private long totalBytesRead 			= 0;

	public FileUploadListener()
	{
		uploadInfoBean = new UploadInfoBean();
	}

	@Override
	public void update(long bytesRead, long contentLength, int items)
	{
		totalBytesRead 	= bytesRead;
		bytesTransferred 	= bytesRead;
		if (fileSize != contentLength)
			fileSize = contentLength;

	}

	public boolean isMultipartFinished()
	{
		return multipartFinished;
	}

	public void setMultipartFinished(boolean multipartFinished)
	{
		this.multipartFinished = multipartFinished;
	}

	/**
	 * Function is used as Javascript-DWR-Function!
	 * @return
	 */
	public UploadInfoBean getStatus()
	{
		uploadInfoBean.setTotalSize(fileSize/1024);
		uploadInfoBean.setBytesRead(totalBytesRead/1024);
		String per = NumberFormat.getPercentInstance().format((double) bytesTransferred / (double) fileSize);
		uploadInfoBean.setPercentage(Integer.parseInt(per. substring(0, per.length() - 1)));
		return uploadInfoBean;
	}

}

Hier die JSP, in der die Dateien hochgeladen werden:

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/jsp/include.jsp"%>





" type="submit">

Hier die Bean, die den Status speichert:

public class UploadInfoBean
{
	private long totalSize = 0;
	private long bytesRead = 0;
	private int percentage = 0;

	public int getPercentage()
	{
		return percentage;
	}
	public void setPercentage(int percentage)
	{
		this.percentage = percentage;
	}

	public long getTotalSize()
	{
		return totalSize;
	}
	public void setTotalSize(long totalSize)
	{
		this.totalSize = totalSize;
	}
	public long getBytesRead()
	{
		return bytesRead;
	}
	public void setBytesRead(long bytesRead)
	{
		this.bytesRead = bytesRead;
	}
}

Und hier die Auszüge aus der Context.xml


	
	



	 

	
		
			
		
	


 	
		
 	

 	

Ich hoffe, das reicht, um den Ladebalken nachzubauen…




Zugriff auf LDAP der Bundesnetzagentur

Problem: Ich möchte jede Nacht die neuesten qualifizierten Signaturen der akkreditierten Anbieter der Bundesnetzagentur runterladen und diese in einem Java-Keystore speichern!
Bundesnetzagentur

Lösung:

BouncyCastle downloaden und installieren Download

Einen Job anlegen:

public class KeyStoreUpdateJob extends QuartzJobBean
{
	private static final Logger logger = Logger.getLogger(KeyStoreUpdateJob.class);

	private KeyStore accreditedKeyStore;

	@Override
	protected void executeInternal(JobExecutionContext context)
			throws JobExecutionException
	{
			accreditedKeyStore = KeyStore.getInstance("JKS");
			accreditedKeyStore.load(new FileInputStream(new File("path_to_keystore")), "password".toCharArray());

			Builder builder 			= new X509LDAPCertStoreParameters.Builder("ldap://ldap.nrca-ds.de:389","dc=ldap,dc=nrca-ds,dc=de");
			CertStore ldapCertStrore 	= CertStore.getInstance("LDAP", builder.build(),"BC");

			X509CertSelector selector 	= new X509CertSelector();
			//First we load all certificates from LDAP
			try
			{
				Iterator iterator = ldapCertStrore.getCertificates(selector).iterator();
				while(iterator.hasNext())
				{
					X509Certificate crl = (X509Certificate )iterator.next();
					accreditedKeyStore.setCertificateEntry(crl.getSubjectDN().getName(), crl);
				}

				//After that we save all in the keystore
				FileOutputStream fos = null;
				try
				{
					fos = new FileOutputStream(new File("path_to_keystore"));
					accreditedKeyStore.store(fos,  "password".toCharArray());
					fos.flush();
					fos.close();
					logger.info("Keystore was updated with Certificates from LDAP(Netzagentur) and from Folder");

				} catch (CertificateException e)
				{
					logger.error(e.getMessage());
				} finally
				{

					IOUtils.closeQuietly(fos);
				}

			} catch (CertStoreException e)
			{
				logger.error(e.getMessage());

			}
	}
}

Den Job in Spring verdrahten: