使用过滤器来控制权限

如何使用过滤器来控制权限

例如:我们以12306中的用户角色为例,普通用户的权限与管理员的权限

package com.neuedu.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
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;

import com.neuedu.entity.User;
/**
 * 自定义过滤器---权限控制:(过滤指定的请求)
 * 
 * 		1.用户未登录
 * 			直接跳转回Login.jsp
 * 
 *      2.用户已登录
 *      	如果用户为普通用户,只允许访问普通用户的界面
 *      	如果用户为管理员,允许访问普通用户 & 管理员的界面
 *
 */
@WebFilter(urlPatterns={"/Admin/*","/User/*"})
public class LoginFilter implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		
		//父类 -> 子类
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)resp;
		
		//获取登陆的用户信息
		HttpSession session = request.getSession();
		User user = (User)session.getAttribute("user");
		
		//1.用户未登录,直接跳转回Login.jsp
		if(user == null || user.getId() <= 0)
		{
			System.out.println("您好,未登录哦!!");
			response.sendRedirect(request.getContextPath() + "/Login.jsp");
		}
		//2.用户已登录
		else
		{
			System.out.println("恭喜你,登陆成功过了!!");
			//如果用户为普通用户,只允许访问普通用户的界面
			//如果用户为管理员,允许访问普通用户 & 管理员的界面
			
			//只有普通用户,尝试访问管理员界面时,拦截,其他均可放行  (1、管理员 2、普通用户)
			String url = request.getRequestURI();
			if("2".equals(user.getRule()) && url.contains("Admin"))
			{
				System.out.println("您好,您是普通用户,不具备访问管理员界面的权限!!");
				response.sendRedirect(request.getContextPath() + "/ExitServlet");
			}
			else
			{ 
				chain.doFilter(request, response);
			}
		}
	}

	@Override
	public void destroy() {}

}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值