關於springmvc 方法注解攔截器的解決方案,多用於方法的鑒權


最近在用SpringMvc寫項目的時候,遇到一個問題,就是方法的鑒權問題,這個問題弄了一天了終於解決了,下面看下解決方法

 

項目需求:需要鑒權的地方,我只需要打個標簽即可,比如只有用戶登錄才可以進行的操作,一般情況下我們會在執行方法時先對用戶的身份進項校驗,這樣無形中增加了非常大的工作量,重復造輪子,有了java注解只需要在需要鑒權的方法上面打個標簽即可:

解決方案

  1、首先創建一個注解類:

1 @Documented
2 @Inherited
3 @Target({ElementType.METHOD,ElementType.TYPE})
4 @Retention(RetentionPolicy.RUNTIME)
5 public @interface Auth {
6     boolean validate() default true;
7 }

  2、再創建一個攔截器:

  

 1 public class AuthInterceptor extends BaseInterceptor{
 2 
 3     @Override
 4     public boolean preHandle(HttpServletRequest request,
 5             HttpServletResponse response, Object handler) throws Exception {
 6         if(handler.getClass().isAssignableFrom(HandlerMethod.class)){
 7             Auth authPassport = ((HandlerMethod) handler).getMethodAnnotation(Auth.class);
 8             
 9             //沒有聲明需要權限,或者聲明不驗證權限
10             if(authPassport==null){
11                 return true;
12             }else{                
13                 //在這里實現自己的權限驗證邏輯
14                 if(true){//如果驗證成功返回true(這里直接寫false來模擬驗證失敗的處理)
15                     System.out.println("執行權限校驗了");
16                     return true;
17                 }else{//如果驗證失敗
18                     //返回到登錄界面
19 //                    System.out.println("權限校驗對了");
20 //                    response.sendRedirect("account/login");
21                     return false;
22                 }       
23             }
24         }else{
25             return true;
26         }
27     }
28 
29 }

  3、配置攔截器:需要在*-servlet.xml里面增加以下代碼,如果您自定義了配置文件也可直接放到您定義的配置文件中

  

1     <mvc:interceptors>
2         <bean class="com.benxq.shop.user.interceptors.AuthInterceptor"/>
3     </mvc:interceptors>

  注意:需要將默認的改為RequestMappingHandlerMapping,增加RequestMappingHandlerAdapter的bean

 

  重新啟動tomcat即可,

  溫馨提示:如果對方法需要鑒權只需要在方法上面打上@Auth,如果對類的所有方法需要鑒權,只需要在類上面打上@Auth即可。

  

  那么問題來了,方法攔截器會吧靜態資源一塊攔截,我們需要在tomcat中進行對靜態文件進行攔截如:我的解決方法是在web.xml進行配置,大家有好的方法也可以加我扣扣752432995一塊探討

  

1 <servlet-mapping>
2       <servlet-name>default</servlet-name>
3       <url-pattern>*.jpg</url-pattern>
4   </servlet-mapping>
5   <servlet-mapping>
6       <servlet-name>default</servlet-name>
7       <url-pattern>*.png</url-pattern>
8   </servlet-mapping>

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM