Pessoal, estou tendo problemas em capturar as letras de uma string é que estou utilizando uma função para retornar o usuário da rede e nesta função além do nome do usuário são retornados diversos outros caracteres que seriam desnecessários. Gostaria de ver com vocês se alguém saberia me dizer como fazer para percorrer esta string e retornar somente as letras desprezando os demais caracteres. Agradeço se alguém tiver alguma dica de como eu poderia fazer isto.
String.replace()?
Valeu pela força cv. Obrigado! :thumbup:
Pessoal, tenho o seguinte código para pegar o usuário da rede:[code]<%@ page contentType=“text/html” language=“java” import=“java.sql.*”%>
<%@ page import=“sun.misc.BASE64Encoder” %>
<%
String auth = request.getHeader(“Authorization”);
if (auth == null) {
response.setStatus(response.SC_UNAUTHORIZED);
response.setHeader(“WWW-Authenticate”, “NTLM”);
return;
}
if (auth.startsWith("NTLM ")) {
byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
int off = 0, length, offset;
String s;
if (msg[8] == 1) {
off = 18;
byte z = 0;
byte[] msg1 = {(byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S',
(byte)'S', (byte)'P', z,
(byte)2, z, z, z, z, z, z, z,
(byte)40, z, z, z, (byte)1, (byte)130, z, z,
z, (byte)2, (byte)2, (byte)2, z, z, z, z, //
z, z, z, z, z, z, z, z};
//
response.setStatus(response.SC_UNAUTHORIZED);
response.setHeader("WWW-Authenticate", "NTLM "
+ new sun.misc.BASE64Encoder().encodeBuffer(msg1).trim());
return;
}
else if (msg[8] == 3) {
off = 30;
length = msg[off+17]*256 + msg[off+16];
offset = msg[off+19]*256 + msg[off+18];
s = new String(msg, offset, length);
//out.println(s + " ");
}
else
return;
length = msg[off+1]*256 + msg[off];
offset = msg[off+3]*256 + msg[off+2];
s = new String(msg, offset, length);
//out.println(s + " ");
length = msg[off+9]*256 + msg[off+8];
offset = msg[off+11]*256 + msg[off+10];
s = new String(msg, offset, length);
//out.println("Hello <span style='position:relative; width:190;"
// + " height:10;filter:glow(Color=#009966,Strength=1)'>");
out.print(s);
String usuario = s;//System.getProperty("user.name");
out.println(usuario);
Connection con;
Statement stm;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:helpdesk","helpdesk","1234");
stm = con.createStatement();
out.println("Conexão efetuada com sucesso");
ResultSet rs = stm.executeQuery("SELECT * from usuario where nome_usuario='"+usuario+"'");
out.println(rs);
try {
while (rs.next()){
out.print(s);
String idade = rs.getString(2);
out.println(idade);
}
} catch (Exception e) {
out.println("Não foi possível conectar ao banco" + e.getMessage());
}
}%>
</BODY>[/code]Consigo trazer o seu valor para a tela, mas acontece que quando chamo ele dentro do Select, me é retornada o seguinte erro:[quote][Microsoft][ODBC SQL Server Driver][SQL Server]Unclosed quotation mark before the character string ‘d’[/quote]Sendo que meu usuário da rede é dcarvalho. Verifiquei que ao exibir o código fonte me foi retornado o valor da variável usuário da seguinte maneira: [quote]dNULcNULaNULrNULvNULaNULlNULhNULoNUL[/quote]Provavelmente dentro do Select ele verifica se no banco existe este registro “dNULcNULaNULrNULvNULaNULlNULhNULoNUL”, sendo que o registro existente é “dcarvalho”. Teria alguma forma de eu retirar estes caracteres “NUL” da string. Agradeço se alguém puder me dar uma força.
:shock: :shock: :shock:
O que esse codigo ta fazendo!? Autenticacao NTLM na unha!? Cara, vc eh macho :mrgreen:
Voce pode usar o String.replace() pra tirar os NULs dai - mas isso provavelmente eh uma solucao meio ingenua, ja que esses NULs devem estar ai por algum motivo (Unicode sendo mal convertido, por exemplo).
Valeu cv pela dica, mas ainda não consegui . O valor que apareceu para mim no código fonte da página que está sendo passado para a string s:[quote] dNULcNULaNULrNULvNULaNULlNULhNULoNUL quando deveria ser dcarvalho.[/quote]
Tentei passar para hexadecimal, onde ele pegou os valores direitinho “6400630061007200760061006c0068006f00”, onde o 00 em hexa representa justamente o caracter NUL. Tentei logo após dar um replaceAll(“00”, “”), mas não funcionou. Agradeço sua ajuda, estou apanhando bastante mas tentando encontrar uma maneira de substituir estes caracteres NUL e ajeitar a String. O engraçado é que se tento copiar a string " dNULcNULaNULrNULvNULaNULlNULhNULoNUL" contida no código fonte da página JSP e colar em algum editor de textos, só aparece o primeiro caracter d, justamente aquele que aparecia na mensagem do SQL Unclosed quotation mark before the character string ‘d’". Agradeço se alguém tiver mais alguma dica que possa ajudar.
:shock: :shock: :shock: (merece 3)
1 - tenta pegar o nome do usuário com request.getRemoteUser();
2 - usa preparedStatement
:mrgreen:
Valeu a dica foia, mas já utilizei este request.getRemoteUser(); e sempre me era retornada a string null. Não sei se tenho que fazer alguma espécie de configuração, ou instalar alguma API para fazer este comando funcionar. Agradeço se puderes me dar uma ajuda ou algum exemplo de como fazer para que este comando me retorne a string com o nome do usuário da rede. Obrigado!