权限控制
普通用户只能访问client
文件夹下面的jsp文件,对于没有权限操作的admin
文件夹就会提示错误,而超级用户同时可以访问两者,一直很好奇这个权限限制怎么实现的。
原来在存在一个AdminPrivilegeFilter
类继承自过滤器Fliter
,获取Session
的role
属性对此进行的管制:
// 1 强制转换
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
// 2判断是否具有权限
User user = (User) request.getSession().getAttribute("user");
if (user != null && "超级用户".equals(user.getRole())) {
// 3.放行
chain.doFilter(request, response);
return;
}
response.sendRedirect(request.getContextPath() + "/error/privilege.jsp");
并在web.xml注册信息里面对所有访问进行了拦截:
<filter>
<filter-name>adminPrivilegeFilter</filter-name>
<filter-class>cn.itcast.itcaststore.web.filter.AdminPrivilegeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>adminPrivilegeFilter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
页面分析
按照代码逻辑,管理员登陆后只能进入home.jsp
页面,并不像和普通用户一样可以进行购书操作的逻辑。页面由四个jsp组成,利用<frameset>
标签划分各个<frame>
搭建框架。body { SCROLLBAR-ARROW-COLOR: SCROLLBAR-BASE-COLOR:}
语句控制滚动条颜色。
jsp代码:
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
body
{
SCROLLBAR-ARROW-COLOR: #ffffff; SCROLLBAR-BASE-COLOR: #dee3f7;
}
</style>
</head>
<frameset rows="103,*,43" frameborder=0 border="0" framespacing="0">
<frame src="${pageContext.request.contextPath}/admin/login/top.jsp" name="topFrame" scrolling="NO" noresize>
<frameset cols="159,*" frameborder="0" border="0" framespacing="0">
<frame src="${pageContext.request.contextPath}/admin/login/left.jsp" name="leftFrame" noresize scrolling="YES">
<frame src="${pageContext.request.contextPath}/admin/login/welcome.jsp" name="mainFrame">
</frameset>
<frame src="${pageContext.request.contextPath}/admin/login/bottom.jsp" name="bottomFrame" scrolling="NO" noresize>
</frameset>
</html>
top.jsp
有两个功能,显示日期以及退出系统,日期显示利用document
内置对象进行输出的,js语句不用<%>内嵌,而是语句块一样写在一起。
<font color="#000000">
<script language="JavaScript">
tmpDate = new Date();
date = tmpDate.getDate();
month = tmpDate.getMonth() + 1;
year = tmpDate.getFullYear();
document.write(year);
document.write("年");
document.write(month);
document.write("月");
document.write(date);
document.write("日 ");
myArray = new Array(6);
myArray[0] = "星期日"
yArray[1] = "星期一"
myArray[2] = "星期二"
myArray[3] = "星期三"
myArray[4] = "星期四"
myArray[5] = "星期五"
myArray[6] = "星期六"
weekday = tmpDate.getDay();
if (weekday == 0 | weekday == 6) {
document.write(myArray[weekday])
} else {
document.write(myArray[weekday])
};
</script>
</font>
退出登录调用了自定义函数exitSys()
,利用window
内置对象window.top
返回该页面的顶层窗口(不过实测,点击后并无反应,Session
也没有失效)。
<script type="text/javascript">
function exitSys() {
var flag = window.confirm("确认退出系统吗?");
if (flag) {
window.top.open('', '_parent','',true);
window.top.close();
}
//如果你使用的是firefox浏览器必须要做以下设置
//1、在地址栏输入about:config然后回车,警告确认
//2、在过滤器中输入”dom.allow_scripts_to_close_windows“,双击即可将此值设为true 即可完成了
}
</script