即防止用户在浏览器中直接访问需要登录才能访问的页面。有哪些方案,讨论一下
解决方案 »
- sql转hql请教,小妹不胜感激
- java web开发常用的权限框架
- java Arrays.asList()的问题
- 主页 Application 加载统计数据问题
- JAVA EE 技术交流群欢迎大家的加入
- 关于Linux和Unix的区别,请搞手指点
- 关于之前发表问题,现在已自己解决,分享一下
- jb7配置wl7,不行啊!
- <BEA-000449> <Closing socket as no data read from it on 172.100.104.27:49,805 du
- java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoade
- Exception sending context initialized event to listener 错误求助
- 一个HQL语句不会写!!!
方法2、每个页面都包含同一个识别用户是否登录的Servlet或JSP片段,也要利用Session
方法3、不用Session直接用Cookie也可以
...
如果单看是否登录的话
/*
* 页面访问过滤器
*
* 流程设计:
* 1. 判断用户访问页面是否需要登录,不需要登录则直接前进,如果需要登录,则进行步骤2。
* 2. 判断用户是否登录,登录则进行步骤3,否则跳转的登录页面。
* 3. 判断用户是否拥有访问此页面的权限,拥有权限则显示页面,没有则提示用户没有访问权限。
*
* 方法定义:
* 1.public boolean isNeedLogin(String uri,HttpServletRequest req) ——判断访问页面是否需要登录
* 2.public boolean isLogin(HttpSession session) ——判断用户是否登录
* 3.public boolean hasPagePriviledge(String uri, HttpSession session) ——判断是否拥有访问页面权限
*/核心方法:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
RequestDispatcher loginDispatcher = req.getRequestDispatche("login.jsp");
RequestDispatcher denyDispatcher = req.getRequestDispatcher("common/noPriviledge.jsp");
HttpSession session = req.getSession();
String pageUri = req.getRequestURI();
// System.out.println(pageUri);
if(isNeedLogin(pageUri,req)){
if(isLogin(session)){
if(hasPagePriviledge(pageUri,session)){
System.out.println("需要登录,拥有权限");
chain.doFilter(request, response);
}else{
System.out.println("需要登录,但没权限");
denyDispatcher.forward(request, response);
}
}else{
System.out.println("需要登录,但没登录");
loginDispatcher.forward(request, response);
}
}else{
System.out.println("不需要登录");
chain.doFilter(request, response);
}
}public boolean isNeedLogin(String uri,HttpServletRequest req){
String freePage = req.getContextPath() + "/login.jsp";
return !freePage.contains(uri);
}
public boolean isLogin(HttpSession session){
Object loginUser = session.getAttribute("loginUser");
if(null != loginUser && !"".equals(loginUser)){
return true;
}else{
return false;
}
}
public boolean hasPagePriviledge(String uri, HttpSession session){
String priviledgeList = (String)session.getAttribute("priviledgeList");
return priviledgeList.contains(uri);
}