使用場景: 項目里面在做一個請求時候發現,不同的請求,有些請求會跳轉到 spring mvc的自定義方法中,有些卻不進去。自定義的方法:
<mvc:annotation-driven >
<mvc:argument-resolvers>
<bean class="com.zhuanche.car.web.resolver.AdminBaseFormArgumentResolver">
<property name="adminSessionUserManager" ref="adminSessionUserManager"/>
</bean>
</mvc:argument-resolvers>
</mvc:annotation-driven>
AdminBaseFormArgumentResolver 方法:
public class AdminBaseFormArgumentResolver extends BaseFormArgumentResolver { private static final Logger logger = LoggerFactory.getLogger(AdminBaseFormArgumentResolver.class); AdminSessionUserManager adminSessionUserManager; @Override protected SessionUser getSessionUser(NativeWebRequest webRequest) { if(SecurityUtils.getSubject().isAuthenticated()){ String username = (String) SecurityUtils.getSubject().getPrincipal(); logger.debug("username = {}", username); return adminSessionUserManager.getSessionUser(username); } throw new UnauthenticatedException("當前用戶未登錄"); } @Override public void afterPropertiesSet() throws Exception { Assert.notNull(this.adminSessionUserManager, "property adminSessionUserManager is required."); } public void setAdminSessionUserManager(AdminSessionUserManager adminSessionUserManager) { this.adminSessionUserManager = adminSessionUserManager; } }
上網搜了后就,最終明白:這個方法是和 傳的參數有關系,只要帶有某一些參數或者特定的注解,就會進入自定義的方法。如果不帶有,則不會進入。但是原理 真心不太明白,而且也不知道 在哪里控制的。下面的文章有類似的用法:
https://blog.csdn.net/lqzkcx3/article/details/78794636