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.