1、SpringMVC配置
系统中的大部分页面都需要登录后再访问,那么就要多每次访问都进行判断,判断用户是否已经登录。在没有SpringSecurity的日子里,要判断每次访问用户是否已经登录,就需要配置一个拦截器,在SpringMVC配置中添加代码如下:
<!-- 注册拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 配置需要拦截资源,"/**"对应多层路径 -->
<mvc:mapping path="/**"/>
<!-- 配置不拦截资源 -->
<mvc:exclude-mapping path="/admin/to/login/page.html"/>
<mvc:exclude-mapping path="/admin/do/login.html"/>
<mvc:exclude-mapping path="/admin/do/logout.html"/>
<!-- 配置拦截器类 -->
<bean class="com.alageek.crowd.mvc.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
2、拦截器类
上述配置中用到了名为LoginInterceptor的拦截器类,该类为自行定义,代码如下:
/**
* 登录拦截
* @author alageek
*/
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Admin admin = (Admin) session.getAttribute(CrowdConstant.ATTR_NAME_LOGIN_ADMIN);
if(admin == null){
throw new AccessForbiddenException(CrowdConstant.MESSAGE_ACCESS_FORBIDDEN);
}
return true;
}
}
继承的父类HandlerInterceptorAdapter中有多个方法,这边只需要重写preHandle方法,表示在所有请求之前执行方法主体,方法中首先获取一个session对象,因为我们在登录后会将管理员对象放入session域中,然后从session对象中取出管理员对象判断是否为空,如果为空则抛出访问不被允许的自定义异常,若不为空则表示已登录,继续下一步操作。
ps:抛出的自定义异常由全局的异常处理机制来处理。

1517

被折叠的 条评论
为什么被折叠?



