当前位置: 代码迷 >> Java Web开发 >> JSP路劲解决方案
  详细解决方案

JSP路劲解决方案

热度:74   发布时间:2016-04-17 00:09:09.0
JSP路劲
怎么实现Jsp限制路径直接访问,是在Servlet限制还是在Jsp页面,希望大虾能介绍下经典的和常用的方法。

------解决方案--------------------
一般情况用户登陆后都会将用户信息存入session中,你可以使用过滤器filter过滤你要设置权限的路径,当用户直接在地址栏输入该路径时,会先进入过滤器,你可以判断session中是否存在用户信息,若没有强制跳转到登陆页面.
------解决方案--------------------
探讨

一般情况用户登陆后都会将用户信息存入session中,你可以使用过滤器filter过滤你要设置权限的路径,当用户直接在地址栏输入该路径时,会先进入过滤器,你可以判断session中是否存在用户信息,若没有强制跳转到登陆页面.

------解决方案--------------------
Java code
//获取请求路径String url = request.getRequestURI();if(url.contains("你要限制的路径")){    //这里做操作}
------解决方案--------------------
1.直接在XML里面配置filter
<filter>
<filter-name>PopedomFilter</filter-name>
<filter-class>com.wepull.hrms.filter.PopedomFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PopedomFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.写Filter,即上面配置的com.wepull.hrms.filter.PopedomFilter这个类
package com.wepull.hrms.filter;

import java.io.IOException;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.wepull.hrms.util.UserDTO;

public class PopedomFilter implements Filter{
//此处导包是import javax.servlet.Filter
public void destroy() {

}

public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
//1.处理参数
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;

//2.拦截url
String path = request.getRequestURI();
System.out.println("path:"+path);
int index = path.indexOf("/");
String url = path.substring(index+1);
url = url.substring(url.indexOf("/")+1);
System.out.println("url:"+url);

if(url.contains(".jsp")||url.contains(".html")||url.contains(".htm")||url.contains(".gif")||url.contains(".jpg")
||url.contains(".css")||url.contains(".js")||url.contains("doLogin") || url.contains("")) {
chain.doFilter(request, response);
return;
}

//权限拦截:1.判断是否登录 2.看是否有权限
HttpSession session = request.getSession();
UserDTO dto = (UserDTO)session.getAttribute("USER");

if(dto==null) {//没有登录,重新返回登录页面
response.sendRedirect("/HRMS/login.html");
return;
} else {//如果登录成功
List<String> urls = dto.getUrls();
if(urls!=null && urls.size()>=1) {
//看是否拥有当前的权限(url)
System.out.println(urls.contains(url));
if(urls.contains(url)) {
chain.doFilter(request, response);//放行
return;
}else {
response.sendRedirect("/HRMS/error.jsp");
}
}
}
}

public void init(FilterConfig arg0) throws ServletException {

}
}
在URL的处理上,只要包含是页面的都不让通过,只有先进验证的servlet确认权限之后才让通过。
------解决方案--------------------
用过滤器就好了,页面上有标签

/**
 * Copyright ® 2009 YuanChung All right reserved.
 */
  相关解决方案