Alguem poderia me ceder um exemplo de uso de filter para validar usuário ?
Quiquié esse negócio de Filer que você está falando? Explique-se
Decerto não deve ser isto aqui: www.excelmeridiandata.com/products/nas_datanas_xp/datanas-smartsync.pdf
Filer que estou dizendo é filtros servlets que servem para filtrar por exemplo se um usuário está logado. O nome correto é: “Intercepting Filter”
ah, bom, então vou corrigir o seu “subject” que vai dar um monte de confusão.
- Podia dizer para que application server você precisa escrever esse servlet, e para que ambiente? Por exemplo, se é Tomcat e a autenticação é em um domínio NT do Windows, você pode tentar um servlet que já está pronto em http://jcifs.samba.org/
o exemplo do projeto queestou fazendo:
Controlador
package br.com.dogato.controle;
import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.dogato.controle.actions.*;
public class PetController extends HttpServlet {
private HashMap actions = new HashMap();
public void init() throws ServletException {
actions.put("login", new ActionLogin());
actions.put("logout", new ActionLogout());
actions.put("erro", new ActionErro());
actions.put("cadUsu", new ActionCadastroCliente());
}
private Action getAction(String chave){
try{
System.out.println("Chave " + chave);
Action acao = (Action)actions.get(chave);
if(acao == null){
System.out.println("Acao nula");
return (Action)actions.get("login");
}
else{
System.out.println(((Action)actions.get(chave)).getClass());
return (Action)actions.get(chave);
}
}
catch(Exception e){
e.printStackTrace();
return (Action)actions.get("login");
}
}
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
service(arg0, arg1);
}
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
service(arg0, arg1);
}
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String actionType = request.getParameter("actionType");
System.out.println(actionType);
Action acao = getAction(actionType);
acao.execute(request,response);
}
}
Filtro:
package br.com.dogato.controle;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import br.com.dogato.persistencia.UsuarioDAO;
public class Filtro implements Filter {
private ServletContext context = null;
public void init(FilterConfig config) throws ServletException {
this.context = config.getServletContext();
}
public void destroy() {
context = null;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (request instanceof HttpServletRequest) {
HttpServletRequest req = (HttpServletRequest)request;
if(req.getSession().getAttribute("usuario") == null){
UsuarioDAO dao = new UsuarioDAO();
req.getSession().setAttribute("usuario", dao.buscarUsuario(req.getUserPrincipal().getName()) );
}
}
chain.doFilter(request, response);
}
}
WEB.XML
<servlet>
<servlet-name>PetController</servlet-name>
<display-name>PetController</display-name>
<description>Servlet Controlador</description>
<servlet-class>br.com.dogato.controle.PetController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PetController</servlet-name>
<url-pattern>/controller</url-pattern>
</servlet-mapping>
<filter>
<filter-name>Filtro</filter-name>
<filter-class>br.com.dogato.controle.Filtro</filter-class>
</filter>
<filter-mapping>
<filter-name>Filtro</filter-name>
<url-pattern>/controller</url-pattern>
</filter-mapping>
Utilizei o filtro para que assim que o usuário logue, eu pegue seu login e dê para um DAO ir no banco preencher um ojbeto usuário, e colocar na sessão, e só fazer isso 1x.
Qulaquer dúvida tamos ai.
Acho que para gerenciar o login seria melhor utilizar filtros e um JDBC Realm, pq ai o realm cuida do seu login e o filtro só complementa.