package com.ch.ebusiness.controller.admin;
import com.ch.ebusiness.NoLoginException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import javax.servlet.http.HttpSession;
@Controller
public class AdminBaseController {
/**
* 登录权限控制,处理方法执行前执行该方法
*/
@ModelAttribute
public void isLogin(HttpSession session) throws NoLoginException {
if (session.getAttribute("auser") == null) {
System.out.println("管理员账号还没有登录");
throw new NoLoginException("没有登录");
}
}
}
代码学习解释
这段代码是一个Java类,属于Spring框架中的控制器(Controller)类,用于实现管理员后台管理系统的登录权限控制。它包含了一个AdminBaseController
类,该类使用@Controller
注解标记为一个Spring控制器,并定义了一个isLogin
方法,该方法用于检查管理员是否已经登录。
下面是代码中的主要部分的功能解释:
-
@Controller
注解:这个注解告诉Spring框架这个类是一个控制器类,负责处理HTTP请求。 -
isLogin
方法:这是一个公共方法,使用了@ModelAttribute
注解,表示它将在每次处理请求的方法执行前都会执行。 -
参数
HttpSession session
:isLogin
方法接收一个HttpSession
参数,用于获取当前会话的session
对象。 -
判断是否登录:
isLogin
方法通过检查session
中是否存在名为"auser"的属性来判断管理员是否已经登录。如果该属性不存在,说明管理员还没有登录,会抛出NoLoginException
异常,表示没有登录。
总结起来,该AdminBaseController
控制器类中的isLogin
方法用于进行登录权限控制。在其他管理员后台管理系统的控制器方法执行前,会先调用这个方法,检查管理员是否已经登录。如果管理员没有登录,会抛出NoLoginException
异常,然后由全局异常处理器捕获该异常,执行相应的处理逻辑,例如跳转到登录页面或返回错误信息。这样可以确保只有已登录的管理员可以访问受保护的后台管理功能。
@ModelAttribute
是Spring框架中的一个注解,用于将方法的返回值或参数绑定到模型中。它在控制器中的方法上使用,以便在处理HTTP请求时,自动将方法返回的数据或参数传递给视图进行展示或处理。
在您提供的代码中,@ModelAttribute
注解被用于标记一个方法,即isLogin
方法。由于它被标记为@ModelAttribute
,因此在其他控制器方法被调用之前,会自动执行这个方法,并将返回的数据(或参数)绑定到模型中。
在这个特定的例子中,isLogin
方法的目的是检查管理员是否已经登录。如果管理员没有登录,它会抛出NoLoginException
异常,表示没有登录。但是请注意,@ModelAttribute
注解实际上并不是用来处理登录逻辑的,它只是在每次处理请求的方法执行前都会被调用,用于进行登录权限控制。
在更一般的用法中,@ModelAttribute
可以用于多种场景,包括但不限于:
-
将方法的返回值传递给视图展示:控制器方法返回的数据会被自动绑定到模型中,然后传递给相应的视图展示。
-
将请求参数绑定到方法参数:当控制器方法有参数时,
@ModelAttribute
可以将HTTP请求中的数据绑定到这些参数上,方便获取用户提交的数据。 -
在每次请求前执行一些预处理逻辑:与您提供的例子相似,可以在
@ModelAttribute
标记的方法中执行一些预处理逻辑,然后将结果传递给控制器方法。
总的来说,@ModelAttribute
是Spring框架中非常有用的注解,用于处理数据绑定、预处理逻辑和请求参数的处理,从而简化控制器的编写和数据传递。