JavaWeb项目管理员权限过滤器路径错误问题

2020.04.29大战Filter过滤器
管理员权限过滤器代码如下:

package cn.edu.lingnan.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebFilter("/admin/*")
public class AuthorityFilter implements Filter {

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		//1拿到用户的权限,登录的时候
		HttpServletRequest req =(HttpServletRequest) arg0;
		HttpServletResponse resp =(HttpServletResponse) arg1;
		HttpSession s = req.getSession();
		Integer superuser=(Integer) s.getAttribute("superuser");
		System.out.println("AuthorityFilter superuser's values : "+superuser);
		//2根据拿到的权限进行相应的处理,没登录、管理员、普通用户、null、1,、2
        if(superuser!=null) {
        	if(superuser==1 || superuser==0)
        		arg2.doFilter(arg0, arg1);
        	else
        		resp.sendRedirect(req.getContextPath()+"/authority.html");
        }else {
        	resp.sendRedirect(req.getContextPath()+"/index.html");
        }
	}

}

1.写完AuthorityFilter类和admin.html之后,运行整个项目,一直出现这种情况:
在这里插入图片描述

输入账号密码后一直这样,后来觉得配置文件web.xml有问题,就:
在这里插入图片描述

原来漏了个filter,推理稍后。
后来改正后,登录,跳转admin.html时出现:
空白,仔细想,原来是这个:
Project下的build aut…啥的没有勾上,这东西叫重构。
到这了,这是一个关于注销的技术难点,
在这里插入图片描述

在谈这个之前先说说权限控制的问题,我们希望的不是一登录就控制,而是控制一部分的网页资源,起码ok.html能随便看的,不用登陆直接访问
http://localhost:8080/JavaWeb2018764344/ok.html,
因此我们在WebContent下面设置一个文件夹,夹里面的html才是我们要限制的,WebContent下的html可直接访问。
回归正题,一路登录到我们要限制的页面在,由于这个页面还没有设置注销,因此我们回退到ok.html,注销后回到登录页面,原本管理员登录信息已经没了,但此刻再次访问
http://localhost:8080/JavaWeb2018764344/admin/admin.html
还能跳转到限制的管理员页面(只要在再次跳转后的页面刷新即可回到登录页面),这不是我们期望的,原因是啥呢,上图倒数第二行,注销后
没有System.out.println("AuthorityFilter superuser's values : "+superuser);
这是AuthorityFilter类的东西,没有输出权限意味着没读到,因为在该类中读到就一定会输出,说明我们读到的是缓存里的东西,因此我们要在admin.html页面中强制刷新即可,无论你读的是内存还是啥,只要跳到这个页面,就会刷新退回登录页面(当然这仅限于注销管理员账户后),admin.html中强制刷新代码如下:

<body οnlοad="opener.Location.reload()">

最后,关于在管理员才能访问的页面
在这里插入图片描述

注销时出现:
在这里插入图片描述

仔细看路径,我们是在admin.html界面中点的注销,相比正常的注销:
在这里插入图片描述

多了一个admin,这是因为我们在admin文件夹下点的注销,
在这里插入图片描述

人家ok.html是在WebContent下点的注销,当然找不到,因此我们要再多设一个路径,
在这里插入图片描述

/代表WebContent,第一个是WebContent下的html,由于WebContent下还有admin个文件夹,故写成如二。

路径领悟:核心:/ 代表某个文件夹下的直接文件
JavaWeb项目中的路径的第一个/代表JavaWeb2018764344这个文件夹下的直接文件如ok.html,/文件夹xx/文件xx 代表JavaWeb2018764344文件夹下的文件夹xx文件夹的文件xx,因此,在某个文件夹的某个文件中点某个链接必会带上这个文件夹名的。包以文件夹方式存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值