简单的权限管理
首先,在设计权限管理之前,先要对数据库进行一定的理解和设计,就论坛的模块来分析:
游客:能够访问首页,可以进行用户注册,用户登录,找回用户密码,能查看公开帖子,相关评论,能够进入论坛的一些开放板块。
用户:有以上游客所有的功能,在此基础上还能设置个人信息,修改密码,认证个人用户等等;能够发布自己写的帖子,查看其它用户回复的消息,删除自己的帖子,能够和论坛好友进行聊天,能够删除自己帖子的任何回复信息,大致也就是这些功能。
管理员:能够进行用户信息的管理操作,修改用户的访问权限,设置用户的权限,设置论坛版块的开放权限,操作/审核用户提交的帖子,设计论坛模块等等,
用户权限是多对多的关系,在数据库中是就如上图所示一样,用外键来连接约束
以上就是权限管理的游客,用户,管理员的一些相关分析;
在项目开始时要给所有页面用 Filter来过滤所有的页面,防止权限不足也能操作用户或者管理员页面。
@WebFilter("/*")
public class PermiFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
Role role = null;
Object user = req.getSession().getAttribute("user");
if (user == null) {
// 未登录状态
role = new Role();
// 设置权限为游客
role.setId(1);
} else {
// 登录
role = ((User) user).getRole();
}
// 获取访问路径
String path = req.getRequestURI();
path=path.replaceAll(req.getContextPath(),"");
// 检查权限
boolean flog = new RoleService().check(role, path);
if (flog) {
chain.doFilter(req, res);
} else {
req.setAttribute("msg", "权限不足");
req.getRequestDispatcher("/info.jsp").forward(req, res);
}
}
}
在过滤所有页面后,就需要相关的权限来操作各个页面,而这些页面就需要用户登录,然后在过滤器中识别该用户有哪些权限,然后并对相关的页面进行开放访问。
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户名
String name = request.getParameter("name");
//获取密码
String pwd = request.getParameter("pwd");
//去数据库查该用户
User user = new UserService().get(name,pwd);
String msg=null;
//用户信息不为空时
if(user!=null) {
//打包用户
request.getSession().setAttribute("user",user);
msg= "登录成功";
}else {
msg="登录失败";
}
//跳转到异常页
request.setAttribute("msg", msg);
//转发
request.getRequestDispatcher("/info.jsp").forward(request, response);
}
}
对于用户的操作也没几个功能,主要就是管理员对用户的管理功能进行操作。
在设置用户权限的功能里面,我们要在servlet里面进行操作,先查询所有的用户信息,然后转发到一个能显示用户的jsp页面,然后通过修改按钮获取某个用户的相关信息,并在数据库中查询用户组的所有角色,并回显该用户属于什么权限,
进行修改的时候,通过传递过来的Id来进行数据库中的操作,然后并把用户信息通过request打包到jsp页面再进行查询,回显。
//用户组权限管理
protected void user_control(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查看所有的用户组
List<User> users =new UserService().getAllUser();
request.setAttribute("users", users);
request.getRequestDispatcher("/user_control.jsp").forward(request, response);
}
//查看用户所在的权限组
protected void update_control(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uid = request.getParameter("id");
List<Role> roles = new RoleService().getRole();
User getUser = new UserService().getupUser(Integer.parseInt(uid));
request.setAttribute("roles", roles);
request.setAttribute("getUser", getUser);
request.setAttribute("uid", uid);
request.getRequestDispatcher("/control_update.jsp").forward(request, response);
}
//更新用户组
protected void update_control_submit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uid = request.getParameter("uid");
String rId = request.getParameter("rId");
//更新
new UserService().update_submit(Integer.parseInt(uid),Integer.parseInt(rId));
request.setAttribute("msg", "修改成功");
request.getRequestDispatcher("/info.jsp").forward(request, response);
}
在用户组里,就要对每个用户对应的用户组对应的相关权限进行操作
//查询用户组
protected void getAllPageGroup(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查询要修改的角色对象
String id = request.getParameter("id");
//查询所有权限组
List<PageGroup> pgs = new PageGroupService().getAll();
//查询该角色的权限组
Role role=new PageGroupService().getRole(Integer.parseInt(id));
request.setAttribute("pgs", pgs);
request.setAttribute("role", role);
request.getRequestDispatcher("/user_group.jsp").forward(request, response);
}
//修改用户组的相关权限
protected void updatePageGroup(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取一个id
String id = request.getParameter("id");
//获取权限组
String[] page = request.getParameterValues("pgs");
//更新用户组对应的权限
new PageGroupService().updateUserPageGrup(Integer.parseInt(id),page);
request.setAttribute("msg", "修改成功");
request.getRequestDispatcher("/info.jsp").forward(request, response);
}
通过查询所有的权限组对应的访问权限地址来限制用户的访问权限。
//查询权限组
protected void getAllPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pageid=request.getParameter("id");
PageGroup pagp = new PageGroupService().getPageGroup(Integer.parseInt(pageid));
// Page page =new PageGroupService().getAllPage();
request.setAttribute("pagp", pagp);
// request.setAttribute("page", page);
request.getRequestDispatcher("/supersu_pro.jsp").forward(request, response);
}
//删除访问权限页
protected void deletePage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pageid = request.getParameter("id");
new PageGroupService().deletePage(Integer.parseInt(pageid));
request.setAttribute("msg", "删除成功");
request.getRequestDispatcher("/info.jsp").forward(request, response);
}
//添加页面的访问权限
protected void addPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String name = request.getParameter("name");
String path = request.getParameter("path");
Page page = new Page();
page.setName(name);
page.setPath(path);
//添加页面权限
new PageGroupService().addPage(page);
//获取页面权限
Page pg = new PageGroupService().selectPage(name,path);
new PageGroupService().addPageGrup(Integer.parseInt(id),pg);
request.setAttribute("msg", "添加成功");
request.getRequestDispatcher("/info.jsp").forward(request, response);
}