1. 程式人生 > 其它 >彤籌網ssm(二)Day03之登入檢查 攔截器

彤籌網ssm(二)Day03之登入檢查 攔截器

技術標籤:ssm專案springjavasessionservlet

  1. 為了避免跳轉後臺主頁面重新整理瀏覽器導致重複提交表單的操作,使用重定向到指定頁面,使用view-controller跳轉到後臺主頁

  2. 登出

  3. 抽取頭部等檔案建立JSP模板

登入檢查

  1. 未登入自定義異常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); } }
  1. 建立攔截器類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; } }
  1. 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>
  1. 註冊攔截器,但不包含對映到哪個位置(必須配置異常對映地)
    1. 基於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);
    }