SSM基於注解獲取當前登陸的用戶信息


@Controller
public class MyTest {
    @RequestMapping(value = "/heheda",method = RequestMethod.POST)
    @ResponseBody
    public  String test(@mytest myUser str){
        System.out.println("用戶名是 "+str.getName()+"\t用戶密碼是 "+str.getPassword());
        return  str.toString();
    }
    @RequestMapping(value = "/mapping",method = RequestMethod.POST)
    @ResponseBody
    public  String test1(myUser str){
        System.out.println("用戶名1是 "+str.getName()+"\t用戶密碼是1 "+str.getPassword());
        return  str.toString();
    }
    @RequestMapping(value = "/user",method = RequestMethod.POST)
    @ResponseBody
    public  String test1(@LoginUser Users user){
        System.out.println("用戶名2是 "+user.getName()+"\t用戶密碼是2 "+user.getPassword());
        return  user.toString();
    }
}



public class MyTestHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {

    public MyTestHandlerMethodArgumentResolver() {
        super();
    }

    /**
     *  是否支持參數
     * @param methodParameter
     * @return
     */
    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        System.out.println("hasParameterAnnotation "+methodParameter.hasParameterAnnotation(mytest.class)+"\t是否為子類:"+methodParameter.getParameterType().isAssignableFrom(myUser.class));
        return methodParameter.hasParameterAnnotation(mytest.class)&&methodParameter.getParameterType().isAssignableFrom(myUser.class);

    }

    /**
     * 解析參數
     * @param methodParameter
     * @param modelAndViewContainer
     * @param nativeWebRequest
     * @param webDataBinderFactory
     * @return
     * @throws Exception
     */
    @Override
    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
        myUser  user=new myUser();
        user.setName("login");
        user.setPassword("1234");

        return user;
    }
}
注解
@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.PARAMETER)
public @interface  mytest {
   String name() default "zhao";
}

配置

 <!-- 使用XML格式輸出數據 -->
            <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
                <constructor-arg>
                    <bean class="org.springframework.oxm.xstream.XStreamMarshaller">
                        <property name="streamDriver">
                            <bean class="com.thoughtworks.xstream.io.xml.StaxDriver"/>
                        </property>
                        <property name="annotatedClasses">
                            <list>

                            </list>
                        </property>
                    </bean>
                </constructor-arg>
                <property name="supportedMediaTypes" value="application/xml"></property>
            </bean>
        </mvc:message-converters>
        <mvc:argument-resolvers>
            <!--登錄用戶自動注入-->
            <bean class="com.security.LoginUserMethodArgumentResolver"/>
            <bean class="com.test.aop.MyTestHandlerMethodArgumentResolver"/>
        </mvc:argument-resolvers>
    </mvc:annotation-driven>

@Configuration
public abstract  class webconfig implements WebMvcConfigurer {
    public webconfig() {
        super();
    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> list) {
        list.add(myTestHandlerMethodArgumentResolver());
    }

    @Bean
    public   MyTestHandlerMethodArgumentResolver myTestHandlerMethodArgumentResolver(){
        return  new MyTestHandlerMethodArgumentResolver();
    }
}

優化可以設置一個攔截器將登陸信息設置到解析器中


參考: https://www.zhulou.net/post/5167.html


免責聲明!

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



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