Tenho aprendido JSP há muito tempo e já trabalhei em sete ou oito projetos, mas em todos os projetos, quando o usuário faz login, ele vai direto para a página para a qual tem permissão, ou exibe links para páginas acessíveis. Use esta abordagem para controlar ingenuamente o acesso. Nunca pensei que se não fizesse login poderia acessar diretamente a página do usuário digitando o endereço.
O controle de permissões em jsp é obtido através do Filter. Todos os frameworks de desenvolvimento possuem Filter integrado a eles. Se o framework de desenvolvimento não for aplicável, os seguintes métodos de implementação estão disponíveis:
LoginFilter.java
Copie o código do código da seguinte forma:
classe pública LoginFilter implementa Filtro {
private String permitUrls[] = null;
string privada gotoUrl = null;
public void destruir() {
// TODO stub de método gerado automaticamente
permitirUrls = null;
gotoUrl = null;
}
public void doFilter (solicitação ServletRequest, resposta ServletResponse,
Cadeia FilterChain) lança IOException, ServletException {
// TODO stub de método gerado automaticamente
HttpServletRequest res=(HttpServletRequest) solicitação;
HttpServletResponse resp=(HttpServletResponse)resposta;
if(!isPermitUrl(solicitação)){
if(filtroCurrUrl(solicitação)){
System.out.println("--->Faça login");
resp.sendRedirect(res.getContextPath()+gotoUrl);
retornar;
}
}
System.out.println("--->Permitir acesso");
chain.doFilter(solicitação,resposta);
}
filtro booleano públicoCurrUrl(solicitação ServletRequest){
filtro booleano=falso;
HttpServletRequest res=(HttpServletRequest) solicitação;
Usuário usuário =(Usuário) res.getSession().getAttribute("usuário");
if(nulo==usuário)
filtro=verdadeiro;
filtro de retorno;
}
public boolean isPermitUrl(solicitação ServletRequest) {
booleano isPermit = falso;
String UrlAtual = UrlAtual(solicitação);
if (permitUrls! = null && permitUrls.length > 0) {
for (int i = 0; i < permitUrls.length; i++) {
if (permitUrls[i].equals(currentUrl)) {
isPermit = verdadeiro;
quebrar;
}
}
}
retornar isPermit;
}
//solicita endereço
public String currentUrl(solicitação ServletRequest) {
HttpServletRequest res = (HttpServletRequest) solicitação;
String tarefa = request.getParameter("tarefa");
String caminho = res.getContextPath();
String uri = res.getRequestURI();
if (tarefa! = nulo) {//formato uri xx/ser
uri = uri.substring(path.length(), uri.length()) + "?"
+ tarefa;
} outro {
uri = uri.substring(path.length(), uri.length());
}
System.out.println("Endereço de solicitação atual:" + uri);
retornar uri;
}
public void init(FilterConfig filterConfig) lança ServletException {
// TODO stub de método gerado automaticamente
String permitUrls = filterConfig.getInitParameter("permitUrls");
String gotoUrl = filterConfig.getInitParameter("gotoUrl");
this.gotoUrl = gotoUrl;
if (permitUrls! = null && permitUrls.length() > 0) {
this.permitUrls = permitUrls.split(",");
}
}
}
Web.xml
Copie o código do código da seguinte forma:
<filtro>
<filter-name>loginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
<parâmetro de inicialização>
<param-name>ignorar</param-name>
<param-value>falso</param-value>
</init-param>
<parâmetro de inicialização>
<param-name>permitUrls</param-name>
<param-value>/,/servlet/Loginservlet?task=login,/public.jsp,/login.jsp</param-value>
</init-param>
<parâmetro de inicialização>
<param-name>gotoUrl</param-name>
<param-value>/login.jsp</param-value>
</init-param>
</filtro>
<mapeamento de filtro>
<filter-name>loginFilter</filter-name>
<url-padrão>/*</url-padrão>
</filter-mapping>
Este código curto implementa principalmente a filtragem de login do usuário e o princípio da filtragem de permissão é o mesmo. Basta mudar o julgamento sobre se o usuário está logado para saber se ele ou ela tem permissão!