這次帶給大家springmvc實現註解攔截器,springmvc實現註解攔截器的注意事項有哪些,下面就是實戰案例,一起來看一下。
最近在用SpringMvc寫專案的時候,遇到一個問題,就是方法的鑑權問題,這個問題弄了一天了終於解決了,下面看下解決方法
專案需求:需要鑑權的地方,我只需要打個標籤即可,例如只有使用者登入才可以進行的操作,一般情況下我們會在執行方法時先對使用者的身分進項校驗,這樣無形中增加了非常大的工作量,重複造輪子,有了java註解只需要在需要鑑權的方法上面打個標籤即可:
解決方案:
1、先建立一個註解類別:
@Documented @Inherited @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Auth { boolean validate() default true; }
2、再建立一個攔截器:
public class AuthInterceptor extends BaseInterceptor{ @Override public Boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(handler.getClass().isAssignableFrom(HandlerMethod.class)){ Auth authPassport = ((HandlerMethod) handler).getMethodAnnotation(Auth.class); //没有声明需要权限,或者声明不验证权限 if(authPassport==null){ return true; } else{ //在这里实现自己的权限验证逻辑 if(true){ //如果验证成功返回true(这里直接写false来模拟验证失败的处理) System.out.println("执行权限校验了"); return true; } else{ //如果验证失败 //返回到登录界面 // System.out.println("权限校验对了"); // response.sendRedirect("account/login"); return false; } } } else{ return true; } } }
3.設定攔截器:需要在*-servlet.xml裡面增加以下程式碼,如果您自訂了設定檔也可直接放到您定義的設定檔中
<mvc:interceptors> <bean class="com.benxq.shop.user.interceptors.AuthInterceptor"/> </mvc:interceptors>
注意:需要將預設的改為RequestMappingHandlerMapping,增加RequestMappingHandlerAdapter的bean
重新啟動tomcat即可,
小提醒:如果對方法需要鑑權只需要在方法上面打上@Auth,如果對類別的所有方法需要鑑權,只需要在類別上面打上@Auth即可。
那麼問題來了,方法攔截器會吧靜態資源一塊攔截,我們需要在tomcat中進行對靜態文件進行攔截如:我的解決方法是在web.xml進行配置,大家有好的方法也可以加我扣扣752432995一塊探討
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping>
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是springmvc實現註解攔截器的詳細內容。更多資訊請關注PHP中文網其他相關文章!