1.在数据库中建立三个表 ,分别为 用户信息表,用户权限关联表,权限表
--建立用户表
create table t_user(id int identity primary key ,username varchar(30) not null, password varchar(30) not null);
insert into t_user (username,password) values ('admin','123456');
insert into t_user (username,password) values ('guest','123456');
insert into t_user (username,password) values ('lily','123456');
--用户权限表
create table t_permission (id int identity primary key ,linkurl varchar(120),describe varchar(100));
insert into t_permission (linkurl,describe) values ('main.jsp','主页面');
insert into t_permission (linkurl,describe) values ('message.jsp','信息面');
insert into t_permission (linkurl,describe) values ('fuck.jsp','操蛋页面');
insert into t_permission (linkurl,describe) values ('love.jsp','爱情页面');
--用户和权限关联表
create table user_permission (uid int not null,pid int not null);
alter table user_permission add constraint up_uid_user_id foreign key (uid) references t_user(id) on delete cascade on update cascade;
alter table user_permission add constraint up_pid_permission_id foreign key (pid) references t_permission(id) on delete cascade on update cascade;
insert into user_permission (uid,pid) values (1,2);
insert into user_permission (uid,pid) values (1,3);
我们在这里模拟一个用户 ,并给予指定所操作的应用 以admin 用户为例 给指定了 可以访问message.jsp 和fuck.jsp
其他页面程序不再详细的说明,都包括在附加中
下面主要关键的是过滤器
public class FilterPermission extends HttpServlet implements Filter {
/**
*
*/
private static final long serialVersionUID = 1L;
// 字符编码(初始化参数)
protected String encoding = null;
// FilterConfig对象
protected FilterConfig filterConfig = null;
// 初始化方法
public void destroy() {
// TODO Auto-generated method stub
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest servletRequest= (HttpServletRequest)request;
HttpServletResponse servletResponse=(HttpServletResponse)response;
// TODO Auto-generated method stub
// 判断字符编码是否有效
if (encoding != null) {
// 设置request字符编码
servletRequest.setCharacterEncoding(encoding);
// 设置response字符编码
servletResponse.setContentType("text/html; charset="+encoding);
}
// 传递给下一过滤器
try {
chain.doFilter(request, response);
} catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
} catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}
//得到上下文访问路径
String accessPath = servletRequest.getContextPath();
//得到会话
HttpSession session = servletRequest.getSession();
//从会话中得到user对象
User user=(User)session.getAttribute("formvalue");
// SystemDao dao = new SystemDao();
// String linkurl=dao.getPermission(user.getId());
String
//得到请求的URI路径,并以截取
url=servletRequest.getRequestURI().substring(servletRequest.getRequestURI().lastIndexOf("/")+1, servletRequest.getRequestURI().length());
//指定无需经过权限过滤的页面
String exclude= "adminlogin,login.jsp,error.jsp,welcome.jsp";
try {
if(exclude.indexOf(url)==-1){
if(user==null ){
servletResponse.sendRedirect(accessPath+"/index.jsp");
}else{
SystemDao dao = new SystemDao();
//如果user不为空 从对象中得到user 的ID 从数据中查询出所拥有的权限
String linkurl=dao.getPermission(user.getId());
//请求的操作,判断 权限中是否拥有 没有拥有转向于错误提示页面
if(linkurl.indexOf(url)==-1){
servletResponse.sendRedirect(accessPath+"/error.jsp");
}}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
// 对filterConfig赋值
this.filterConfig = filterConfig;
// 对初始化参数赋值
this.encoding = filterConfig.getInitParameter("encode");
}
}
web.xml 过滤器的配置
<filter>
<filter-name>FilterPermission</filter-name>
<filter-class>com.smile.util.FilterPermission</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterPermission</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
分享到:
相关推荐
jsp filter 过滤器判断用户是否登录的一个demo,可按照里面说明来完成
NULL 博文链接:https://zywang.iteye.com/blog/407019
servlet,filter,过滤器技术servlet,filter,过滤器技术
Servlet过滤器大全,各种详细使用的代码! 一、字符编码的过滤器 二、使浏览器不缓存页面的过滤器 三、检测用户是否登陆的过滤器 四、资源保护过滤器 五 利用Filter限制用户浏览权限
一个简单的基于Java的考试系统,MySql数据库,有单选、多选、判断、问答、编程题型
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
:对用户访问权限的控制是B/S模式系统开发和应用的一个重要环节.通过对RBAC模型以及Servlet过滤 器的分析研究,给出了用户权限判断和控制的方法,并采用4层架构技术设计和实现了一个权限管理系统,有效地 实现了...
权限过滤实现Filter后使用SysFilterConfig 类控制 使用Filter配合XsslHttpServletRequestWrapper/MyXssUtil类防止XSS漏洞 API文档管理使用swagger2.7.0 、fasterxml 2.8.0 框架已使用AOP切面及开启cglib代理实现日志...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
7. 使用filter过滤请求 7.1. 批量设置请求编码 7.2. 用filter控制用户访问权限 7.3. filter所谓的特性 7.3.1. 请求映射 7.3.2. 过滤链 7.4. filter的详细配置 8. 配置listener监听器 8.1. 使用...
④ 使用过滤器对权限进行验证; ⑤ 能够对文件的局部内容进行验证; ⑥ 掌握安全验证码的基本实现方式; ⑦ 通过异常处理增强安全性。 二、主要内容: ① 通过修改前面的登录功能,分别对管理员和普通用户的登录进行...
项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...
拦截请求常见的应用场景有: 1、权限检查 2、日记操作 3、事务管理 ……等等 2、Filter 的初体验 要求:在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件、...
2、优化减少过滤器中的sql查询语句 3、优化减少版块帖子列表sql查询语句 4、优化个人空间 5、优化验证问答 6、优化快速编辑帖子的提交方式和帖子附件下载次数 7、优化搜索的排序方式 8、升级优化序列化类 9...
2、优化减少过滤器中的sql查询语句 3、优化减少版块帖子列表sql查询语句 4、优化个人空间 5、优化验证问答 6、优化快速编辑帖子的提交方式和帖子附件下载次数 7、优化搜索的排序方式 8、升级优化序列化类 9...
实现也非常简单,使用过滤器对指定页面处理即可,有点累了,不再折腾了) 8.页面风格统一的问题,比如登录页面、注册页面和主页面的风格可能不太统一 PS: 上面几点是我个人目前认为的不足之处,具体的就请各位自己...
SpringMVC框架概述: 介绍什么是...拦截器和过滤器: 介绍如何使用拦截器和过滤器来实现日志记录、权限验证等功能。 RESTful Web服务: 讲解如何使用SpringMVC开发RESTful风格的Web服务,支持HTTP方法、资源定位等。
26、修改了:使用 Archiver 功能浏览没有阅读权限的主题时,没有显示提示信息的问题。 27、修改了:当编辑“活动主题”时,“插入图片”等按钮没有作用的问题。 28、修改了:开启干扰码功能后,用 IE 浏览器浏览...
这个demo实现了简单地用户管理,权限管理,角色管理,底层使用ssh4的dao,service...利用过滤器实现session超时管理,权限管理需要自己补全。echache实现了二级缓存,打印sql可以看到部分配置后不会重复查询数据库。