Webservice com autenticação + JBOSS 4.2

0 respostas
jhonatan.serafim

Bom dia pessoal,

Estou penando na criação de um webservice com autenticação.
O problema é, simplesmente ele cria o webservice sem autenticação, estavamos fazendo teste
em outro projeto e descobrimos que se mapearmos a classe como um servlet ele tem liberação total,
e para autenticação configura-se o @WebContext.

no web.xml:

<servlet>
   		<servlet-name>NotaFiscalEletronica</servlet-name>
   		<servlet-class>com.webservice.server.NotaFiscalEletronica</servlet-class>
   </servlet>
   <servlet-mapping>
    	<servlet-name>NotaFiscalEletronica</servlet-name>
    	<url-pattern>/NotaFiscalEletronica</url-pattern>
   </servlet-mapping>

classe do webservice tem as seguintes annotations:

@Stateless
@WebService(endpointInterface = "com.webservice.server.INotaFiscalEletronica", serviceName = "NFSe.svc")
@WebContext(contextRoot = "/portal", urlPattern = "/NFSe.svc", secureWSDLAccess = false, authMethod = "BASIC")
@SOAPBinding
@SecurityDomain(value = "JBossWS")
public class NotaFiscalEletronica implements INotaFiscalEletronica {

	private ICompromissoDelegate compromissoDelegate;

	@Resource
	private WebServiceContext wsContext;

	public NotaFiscalEletronica() {
		try {
			this.compromissoDelegate = BusinessDelegateFactory.criarCompromissoDelegate();
		} catch (Exception ignorar) {ignorar.printStackTrace();}
	}

	public DataHandler visualizarNFSePDFporCompromisso(long compromisso) throws CompromissosException {
        return getPDF(compromissoDelegate.getListaNotaFiscalEletronica(DTOFiltroNotaFiscalEletronica.createDTOPorCompromisso(compromisso)));
	}

	public DataHandler visualizarNFSePDFporCMCeCodigoVerificacao(int cmc, String codigoVerificacao) throws CompromissosException {
		return getPDF(compromissoDelegate.getListaNotaFiscalEletronica(DTOFiltroNotaFiscalEletronica.createDTOPorCMCeCodigoVerificacao(
								cmc, codigoVerificacao)));
	}

	public DataHandler visualizarNFSePDFporInscricaoPrestadoreCodigoVerificacao(String inscricaoPrestador, String codigoVerificacao) throws CompromissosException {
		return getPDF(compromissoDelegate.getListaNotaFiscalEletronica(DTOFiltroNotaFiscalEletronica.createDTOPorInscricaoPrestadoreCodigoVerificacao(inscricaoPrestador, codigoVerificacao)));
	}

	public DataHandler visualizarNFSePDFporInscricaoPrestadoreNumero(
			String inscricaoPrestador,
			int numero) throws CompromissosException {
		return getPDF(compromissoDelegate.getListaNotaFiscalEletronica(DTOFiltroNotaFiscalEletronica.createDTOPorInscricaoPrestadoreNumero(
								inscricaoPrestador, numero)));
	}

	@SuppressWarnings("unchecked")
	private DataHandler getPDF(List<VONotaFiscalEletronica> listaNfe) throws CompromissosException{
		if(listaNfe == null || listaNfe.size() == 0) return null;
		
		HttpServletRequest request = (HttpServletRequest) this.wsContext.getMessageContext().get(MessageContext.SERVLET_REQUEST);

		File reportFile = ReportUtil.getFile(RelatorioConstants.REPORT_DIR + "NFes.jasper", request);
		
		Map<Object, Object> parametros = ReportUtil.loadParametrosDefault(request, null);
		parametros.put("REPORT_DIR", ReportUtil.getSubReportDir(RelatorioConstants.REPORT_DIR, request));
		
		List<NotaFiscalEletronicaReport> dados = new ArrayList<NotaFiscalEletronicaReport>();
		for (int i = 0; i < listaNfe.size(); i++)
			dados.add(new NotaFiscalEletronicaReport(listaNfe.get(i)));

		DataSource dataSource = new ByteArrayDataSource(ReportUtil.process(request, reportFile, ReportFormat.PDF, parametros, dados), "application/pdf");
		return new DataHandler(dataSource);
	}
	
}

A classe de interface:

@Local
@WebService
public interface INotaFiscalEletronica {
   
	@WebMethod
	@WebResult(name = "notaFiscalEletronicaServicoPDF")
	@XmlElement
	@XmlAttachmentRef
	@XmlMimeType("application/octet-stream")
	public DataHandler visualizarNFSePDFporCompromisso(
			@WebParam(name = "compromisso") long compromisso)
			throws CompromissosException;

	@WebMethod
	@WebResult(name = "notaFiscalEletronicaServicoPDF")
	@XmlElement
	@XmlAttachmentRef
	@XmlMimeType("application/octet-stream")
	public DataHandler visualizarNFSePDFporCMCeCodigoVerificacao(
			@WebParam(name = "cmc") int cmc,
			@WebParam(name = "codigoVerificacao") String codigoVerificacao)
			throws CompromissosException;

	@WebMethod
	@WebResult(name = "notaFiscalEletronicaServicoPDF")
	@XmlElement
	@XmlAttachmentRef
	@XmlMimeType("application/octet-stream")
	public DataHandler visualizarNFSePDFporInscricaoPrestadoreCodigoVerificacao(
			@WebParam(name = "inscricaoPrestador") String inscricaoPrestador,
			@WebParam(name = "codigoVerificacao") String codigoVerificacao)
			throws CompromissosException;

	@WebMethod
	@WebResult(name = "notaFiscalEletronicaServicoPDF")
	@XmlElement
	@XmlAttachmentRef
	@XmlMimeType("application/octet-stream")
	public DataHandler visualizarNFSePDFporInscricaoPrestadoreNumero(
			@WebParam(name = "inscricaoPrestador") String inscricaoPrestador,
			@WebParam(name = "numero") int numero) throws CompromissosException;
}

O arquivo de configuração do jboss\server\default\conf\login-config.xml, o jbossws-user.properties e jbossws-roles.properties existem e tem senhas lá no jbossws-user.properties que será usado para autenticação do webservice.

<application-policy name="JBossWS">
      <authentication>
        <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
          flag="required">
          <module-option name="usersProperties">props/jbossws-users.properties</module-option>
          <module-option name="rolesProperties">props/jbossws-roles.properties</module-option>
          <module-option name="unauthenticatedIdentity">anonymous</module-option>
        </login-module>
      </authentication>
    </application-policy>

Bom, o webservice funciona certinho, porém ele não pedi autênticação e acredito ser por causa do WebContext,
alguém poderia me ajudar e ve como configurar o WebContext, pois o contextRoot = “/portal” e urlPattern = “/NFSe.svc” não registram
somente é possível acessar pelo context do projeto http://localhost:8080/app/NotaFiscalEletronica e não acessa http://localhost:8080/portal/NFSe.svc.

Agradeço desde já pessoal.

Muito Obrigado pela atenção.

Criado 8 de dezembro de 2011
Respostas 0
Participantes 1