彤籌網ssm(二)Day03之登入檢查 攔截器
阿新 • • 發佈:2021-01-16
技術標籤:ssm專案springjavasessionservlet
-
為了避免跳轉後臺主頁面重新整理瀏覽器導致重複提交表單的操作,使用重定向到指定頁面,使用view-controller跳轉到後臺主頁
-
登出
-
抽取頭部等檔案建立JSP模板
登入檢查
- 未登入自定義異常AccessForbiddenException
/**
* 表示使用者未登入就訪問受保護的資源 時丟擲的異常
* @Author Li Weitong
* @Date 2021/1/15 16:06
*/
public class AccessForbiddenException extends RuntimeException {
public AccessForbiddenException() {
super();
}
public AccessForbiddenException(String message) {
super(message);
}
public AccessForbiddenException(String message, Throwable cause) {
super(message, cause);
}
public AccessForbiddenException(Throwable cause) {
super(cause);
}
protected AccessForbiddenException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
- 建立攔截器類LoginInterceptor,繼承HandlerInterceptorAdapter,只編寫前置方法
/**
* 登入攔截器
* @Author Li Weitong
* @Date 2021/1/15 16:01
*/
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 獲取session物件
HttpSession session = request.getSession();
// 從session域中獲取admin物件
Admin admin = (Admin) session.getAttribute(TongchouConstant.ATTR_NAME_LOGIN_ADMIN);
// 判斷是否登入
if (admin == null) {
// 未登入不允許繼續訪問
throw new AccessForbiddenException(TongchouConstant.MESSAGE_ACCESS_FORBIDEN);
}
// 如果admin物件不為空,則放行
return true;
}
}
- springmvc配置檔案中註冊攔截器
<!-- 註冊攔截器,但不包含對映到哪個位置(必須配置異常對映地)-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 要攔截的資源,/**對應多層路徑-->
<mvc:mapping path="/**"/>
<!-- 不攔截的資源,我現在去登入頁面你不能攔截我,我現在將要登入成功你不能攔截我,我現在退出登入你不能攔截我(可以但沒必要)-->
<mvc:exclude-mapping path="/admin/to/login/page"/>
<mvc:exclude-mapping path="/admin/do/login"/>
<mvc:exclude-mapping path="/admin/do/logout"/>
<bean class="com.lwt.mvc.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
- 註冊攔截器,但不包含對映到哪個位置(必須配置異常對映地)
- 基於xml配置檔案在springmvc配置檔案中配置
<!-- 配置基於XML的異常對映-->
<bean id="simpleMappingExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 配置異常型別和具體視頁面的對應關係-->
<property name="exceptionMappings">
<props>
<!-- key屬性執行異常全類名 標籤體寫對應的頁面名-->
<prop key="java.lang.Exception">system-error</prop>
<!-- 訪問拒絕異常攔截器對映到登入頁面-->
<prop key="com.lwt.exception.AccessForbiddenException">admin-login</prop>
</props>
</property>
</bean>
2. 基於註解配置
/**
* 封裝了公共方法,對普通請求和ajax請求兩種情況不同的處理
* @Author Li Weitong
* @Date 2021/1/14 18:22
*/
@ControllerAdvice // 表示當前類為一個基於註解的異常處理類
public class TongchouExceptionResolver {
/**
* 丟擲拒絕訪問異常,自定義彤籌網的異常處理器,通過註解的當時控制發生異常後頁面的跳轉地址
* @param req
* @param resp
* @param accessForbiddenException
* @return 跳轉到登入頁面去登入獲取許可權
* @throws IOException
*/
@ExceptionHandler(value = AccessForbiddenException.class)
public ModelAndView resolveAccessForbiddenException(HttpServletRequest req, HttpServletResponse resp, AccessForbiddenException accessForbiddenException) throws IOException {
String viewName = "admin-login";
return commonResolver(viewName,req,resp,accessForbiddenException);
}