Pessoal tenho uma aplicação JSF que possui um servlet que só é chamado caso eu faça o login, ou seja, caso haja uma sessão iniciada. Preciso que este servlet seja chamado independente da sessão ser iniciada.
Declaração no web.xml
<servlet>
<servlet-name>imagemServlet</servlet-name>
<servlet-class>br.com.desenv.intranet.util.ImagemServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>imagemServlet</servlet-name>
<url-pattern>/imagem/*</url-pattern>
</servlet-mapping>
Chamada ao Servlet:
<h:graphicImage value="/imagem?id=#{u.imagem.id}" />
E meu Servlet:
public class ImagemServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
@Autowired
private ImagemService imagemService;
@Override
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedInputStream in = null;
BufferedOutputStream output = null;
try {
String imageId = request.getParameter("id");
if (!StringUtil.ehBrancoOuNulo(imageId)) {
Imagem imagemTemp = new Imagem();
imagemTemp.setId(Long.valueOf(imageId));
Imagem imagem = imagemService.consultar(imagemTemp);
if(imagem != null){
byte[] contentFile = imagem.getDados();
String contentType = getServletContext().getMimeType(imagem.getNome());
if (contentType == null) {
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType(contentType);
response.setHeader("Content-Length", String.valueOf(contentFile.length));
response.setHeader("Content-Disposition", "inline; filename=\"" + imagem.getNome() + "\"");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
in = new BufferedInputStream(new ByteArrayInputStream(contentFile), DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
lerArquivo(in, output);
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
close(output);
close(in);
}
}
private void lerArquivo(BufferedInputStream in, BufferedOutputStream output) throws IOException {
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = in.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
}
private void close(Closeable resource) {
if (resource != null) {
try {
resource.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}