SpringMVC实现多个角色的登录拦截器步骤

SpringMVC实现多个角色的登录拦截器步骤

**以上功能所要达到的效果如下:**
1.针对管理员、用户角色,只有登录请求可以进入系统页面,其他的请求一律不允许登录到指定页面。
2.且角色为多角色的拦截功能实现。

第一步,配置拦截器
**配置要求:
1.必须要在springMVC.xml中配置
2.必须检查文件开头是否有http://www.springframework.org/schema/mvc/spring-mvc.xsd字符*

<mvc:interceptors>
					<mvc:interceptor>
						<mvc:mapping path="/**"/>
						 <mvc:exclude-mapping path="/login/*"/>
						<bean class="com.sxt.Auser.controller.LoginInterceptor" />
					</mvc:interceptor>
</mvc:interceptors>

****3.简单介绍一下:
        (1)<mvc:mapping path="/**"/>,代表拦截器拦截所有的请求。
        (2)<mvc:exclude-mapping path="/login/*"/> 代表拦截器不拦截的请求,我这里为登录请求!!!
        (3)<bean class="com.sxt.Auser.controller.LoginInterceptor" />,这是接下来的创建拦截器类的地址。
重点:这里的<mvc:mapping path="/**"/>必须要带上,不写会直接报错,不能出现下面这种代码情况****

 

<mvc:interceptors>
					<mvc:interceptor>
						<mvc:exclude-mapping path="/login/*"/>
						<bean class="com.sxt.Auser.controller.LoginInterceptor" />
					</mvc:interceptor>
</mvc:interceptors>

**这样会直接报错。**

 

第二步,实现登录控制器
 

@RequestMapping("login")
	public String login(AdminVo adminVo,Model model,String userType){
	    String code=WebUtils.getHttpSession().getAttribute("code").toString();
	    if(adminVo.getCode().equals(code)){
		switch (userType) {
		case "管理员":
				Admin admin = this.adminService.login(adminVo);
				if(null != admin){
					//放到session
					WebUtils.getHttpSession().setAttribute("admin", admin);
					return "system/main/index";
				}
		case "用户":
			String  unname = adminVo.getAdminname();
			String  upsw = adminVo.getAdminpsw();
			UserVo userVo = new UserVo();
			userVo.setUnname(unname);
			userVo.setUpsw(upsw);
			User user = this.userService.loginUser(userVo);
			if(null != user){
				//放到session
				WebUtils.getHttpSession().setAttribute("user", user);
				return "user/index";
			}

***这里就是简单的实现了session登录时的存入过程。***

第三步,创建拦截器类

package com.sxt.Auser.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.sxt.sys.domain.Admin;
import com.sxt.sys.domain.User;

/*
 * 用户登录拦截器
 * */
public class LoginInterceptor implements HandlerInterceptor{
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object arg2) throws Exception {
		HttpSession session = request.getSession();
		//但凡可以拿到下面的其中一个session值便放行
		Admin admin = (Admin)session.getAttribute("admin");
		User user = (User)session.getAttribute("user");
		//System.out.println("session 获取的session为:"+session);
		if(user == null && admin==null){
			
			request.setAttribute("msg", "对不起请先登录");
			request.getRequestDispatcher("../index.jsp").forward(request, response);
			return false;
		}
		return true;
	}
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub

		System.out.println("after");
	}
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("post");
	}
}

第四步,实现逻辑

1、通过HttpSession拿到当前页面的session值
2、通过session.getAttribute("admin")以及session.getAttribute("user")获取到存放在sesion中的数据。
3、判断是否能够拿到。

4、只有满足(admin和user的session属性都没有拿到时)才可以拦截,只要满足其中 的一个便放行。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在 Spring MVC 中配置多个拦截可以通过以下步骤完成: 1. 创建拦截类:首先,你需要创建多个拦截类,这些类需要实现 `HandlerInterceptor` 接口。这个接口包含了三个方法 `preHandle`、`postHandle` 和 `afterCompletion`,你可以在这些方法中编写自定义的拦截逻辑。 2. 配置拦截:在 Spring MVC 的配置文件中,通常是 `springmvc-servlet.xml`(如果你是使用 XML 配置的话),或者是 `WebConfig.java`(如果你是使用 Java 配置的话),添加拦截配置。 - XML 配置方式: ```xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/path1/**"/> <!-- 设置拦截路径1 --> <bean class="com.example.Interceptor1"/> <!-- 设置拦截1 --> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/path2/**"/> <!-- 设置拦截路径2 --> <bean class="com.example.Interceptor2"/> <!-- 设置拦截2 --> </mvc:interceptor> </mvc:interceptors> ``` - Java 配置方式: ```java @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new Interceptor1()).addPathPatterns("/path1/**"); // 设置拦截路径1和拦截1 registry.addInterceptor(new Interceptor2()).addPathPatterns("/path2/**"); // 设置拦截路径2和拦截2 } } ``` 你可以根据需要添加更多的拦截配置。 3. 配置拦截路径:在拦截配置中,你可以使用 `path` 或者 `pathPatterns` 属性来设置拦截路径。使用 `path` 属性可以设置单个路径,使用 `pathPatterns` 属性可以使用 Ant 风格的通配符来匹配多个路径。 例如: - `path="/path"`:匹配单个路径 - `pathPatterns="/path/*"`:匹配 `/path/abc`、`/path/def` 等路径 这样,当请求的 URL 匹配到拦截路径时,对应的拦截将会被调用。你可以根据实际需求配置多个拦截,并按照顺序执行。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值