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