最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之Spring AOP 實現(xiàn)用戶權(quán)限驗證

 更新時間:2017年02月03日 11:49:01   作者:Mafly  
本篇文章主要介紹了Java之Spring AOP 實現(xiàn)用戶權(quán)限驗證,用戶登錄、權(quán)限管理這些是必不可少的業(yè)務(wù)邏輯,具有一定的參考價值,有興趣的可以了解一下。

每個項目都會有權(quán)限管理系統(tǒng)

無論你是一個簡單的企業(yè)站,還是一個復(fù)雜到爆的平臺級項目,都會涉及到用戶登錄、權(quán)限管理這些必不可少的業(yè)務(wù)邏輯。有人說,企業(yè)站需要什么權(quán)限管理阿?那行吧,你那可能叫靜態(tài)頁面,就算這樣,但你肯定也會有后臺管理及登錄功能。

每個項目中都會有這些幾乎一樣的業(yè)務(wù)邏輯,我們能不能把他們做成通用的系統(tǒng)呢?

AOP 實現(xiàn)用戶權(quán)限驗證

AOP 在實際項目中運用的場景主要有權(quán)限管理(Authority Management)、事務(wù)管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和調(diào)試管理(Debugging)等。

所以,權(quán)限驗證正好我們可以使用 AOP 來直接實現(xiàn)。具體你項目中權(quán)限怎么管理,管理的粒度是什么級別這些完全取決于項目需要,這里完全不做任何的討論。

先說思路:利用自定義注解及攔截器來在你需要的時候,進行你需要的一些權(quán)限認(rèn)證。這里依然涉及到的有enum(枚舉)annotation(自定義注解)及攔截器相關(guān)知識,廢話不多說,直接開寫代碼。

開始擼一下代碼

**一、建立AuthorityType.java枚舉類

public enum AuthorityType {

  // 登錄和權(quán)限都驗證 默認(rèn)
  Validate,

  // 不驗證
  NoValidate,

  // 不驗證權(quán)限
  NoAuthority;
}

這個枚舉類的作用,依然是使自定義注解用起來爽到還想要。

二、新建Authority.java自定義注解類

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD)
@Documented
public @interface Authority { 
  // 默認(rèn)驗證
  AuthorityType value() default AuthorityType.Validate;

} 

三、再建一個AuthorityAnnotationInterceptor.java

/**
 * 權(quán)限認(rèn)證攔截器
 *
 */
public class AuthorityAnnotationInterceptor extends HandlerInterceptorAdapter {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    throws Exception {

  if (handler instanceof HandlerMethod) {
    HandlerMethod hm = (HandlerMethod) handler;

    Class<?> clazz = hm.getBeanType();
    Method m = hm.getMethod();
    try {
      if (clazz != null && m != null) {
        boolean isClzAnnotation = clazz.isAnnotationPresent(Authority.class);
        boolean isMethondAnnotation = m.isAnnotationPresent(Authority.class);
        Authority authority = null;
        // 如果方法和類聲明中同時存在這個注解,那么方法中的會覆蓋類中的設(shè)定。
        if (isMethondAnnotation) {
          authority = m.getAnnotation(Authority.class);
        } else if (isClzAnnotation) {
          authority = clazz.getAnnotation(Authority.class);
        }
        int code = -1;
        String msg = "";
        if (authority != null) {
          if (AuthorityType.NoValidate == authority.value()) {
            // 標(biāo)記為不驗證,放行
            return true;
          } else if (AuthorityType.NoAuthority == authority.value()) {
            // 不驗證權(quán)限,驗證是否登錄
            // TODO:
            return true;
          } else {
            // 驗證登錄及權(quán)限
            // TODO:

            code = 1;
            msg = "驗證成功!";
            return true;
          }
        }

        // //跳轉(zhuǎn)
        // String url = "";
        // response.getWriter().write("<script>top.location.href='"
        // + url + "'</script>");
        // return false;

        // 未通過驗證,返回提示json
        Map<String, Object> responseMap = new HashMap<String, Object>();
        responseMap.put("code", code);
        responseMap.put("msg", msg);
        responseMap.put("params", "");
        responseMap.put("rows", "");
        String json = new Gson().toJson(responseMap);
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        response.getWriter().write(json);
        return false;
      }
    } catch (Exception e) {
    }
  }
  return false;
  }  
}

這個類的目的就是在打過Authority標(biāo)簽的方法及類上,進行權(quán)限認(rèn)證。我這里分了三種類型:全部驗證、只驗證登錄、不驗證用來滿足我們的業(yè)務(wù)需求。

這里的返回值可以是 JSON 串,也可以是跳轉(zhuǎn)到相應(yīng)的頁面,來實現(xiàn)你想要的效果。

四、配置攔截器

<mvc:interceptors>
  <!-- 權(quán)限認(rèn)證攔截器 -->
  <mvc:interceptor>
    <mvc:mapping path="/**"/>
    <bean class="cn.mayongfa.interceptor.AuthorityAnnotationInterceptor"></bean>
  </mvc:interceptor>
</mvc:interceptors>

/WebContent/WEB-INF/springMVC-servlet.xml文件下的<mvc:interceptors>節(jié)點配置就行,這里可以配置具體要攔截的 Url。

到這里就完成了權(quán)限驗證的工作了,如何使用呢?

使用就非常簡單

因為我們的攔截器配置,然后我們在自定義注解的默認(rèn)是驗證,所以,我們只需要在類名及方法名上打標(biāo)簽就可以。

當(dāng)然,你完全是可以在攔截器中設(shè)置默認(rèn)就驗證所有請求的,接著設(shè)置不驗證的請求。

文章的具體的案例地址:http://xiazai.jb51.net/201702/yuanma/SpringDemo_jb51.rar

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot中的異步任務(wù)解析

    SpringBoot中的異步任務(wù)解析

    這篇文章主要介紹了SpringBoot中的異步任務(wù)解析,SpringBoot 異步任務(wù)是一種在SpringBoot框架中使用的異步處理機制,可以提高系統(tǒng)的并發(fā)能力和響應(yīng)速度,需要的朋友可以參考下
    2023-10-10
  • SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請求客戶端的實現(xiàn)

    SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請求客戶端的實現(xiàn)

    本文主要介紹了SpringBoot3 響應(yīng)式網(wǎng)絡(luò)請求客戶端的實現(xiàn),文章詳細闡述了如何使用SpringBoot3的網(wǎng)絡(luò)請求客戶端進行HTTP請求和處理響應(yīng),并提供了示例代碼和說明,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • C++和Java命令行繪制心形圖案

    C++和Java命令行繪制心形圖案

    這篇文章主要為大家詳細介紹了C++和Java命令行繪制心形圖案,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java獲取任意http網(wǎng)頁源代碼的方法

    Java獲取任意http網(wǎng)頁源代碼的方法

    這篇文章主要介紹了Java獲取任意http網(wǎng)頁源代碼的方法,可實現(xiàn)獲取網(wǎng)頁代碼以及去除HTML標(biāo)簽的代碼功能,涉及Java正則操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • 最新評論

    乌恰县| 岐山县| 南阳市| 扎鲁特旗| 绍兴县| 泗阳县| 长阳| 富顺县| 泰来县| 四川省| 呼玛县| 依兰县| 嵊泗县| 洪湖市| 开阳县| 裕民县| 循化| 洛阳市| 大同县| 怀仁县| 阿拉善右旗| 榆林市| 涞水县| 安徽省| 绩溪县| 桐庐县| 依安县| 夏河县| 新河县| 邵阳市| 阳春市| 崇义县| 平谷区| 南岸区| 鄂州市| 西藏| 若尔盖县| 兴安县| 澳门| 页游| 浙江省|