springboot+shiro的情况下,每次请求subject.getPrincipal都为空,为什么?

新手上路,请多包涵

1,我先要确定是我配置shiro有问题,还是和我的tomcat有关系?

@RequestMapping("login")
    public Object Login(@RequestParam String username,@RequestParam String password) {
             Map<String, Object> result = new HashMap<>();
            result.put("code", "200");
            result.put("msg", "登录成功");
            Subject subject = SecurityUtils.getSubject();
            UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password, true);
            try {
                subject.login(usernamePasswordToken);
                UserList user = (UserList) subject.getPrincipal();

刚认证完的时候没有问题,当第二次前端发送来请求的时候

@RequestMapping(value="CooperationCompany",method=RequestMethod.POST)
    public Object PostCooperationCompany(@RequestBody V_Project_CooperationCompany vpj)  {
        Map<String, Object> result = new HashMap<>();
        Subject subject = SecurityUtils.getSubject();
        UserList u=(UserList)subject.getPrincipal();

此时的u为null。之前一直好着呢,也不知道怎么就不行了,按照网上的折腾了一顿还是不行,下面是配置文件

@Configuration
public class ShiroConfiguration {
@Bean
    public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator(){
        DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator=new DefaultAdvisorAutoProxyCreator();
        defaultAdvisorAutoProxyCreator.setUsePrefix(true);
        return defaultAdvisorAutoProxyCreator;
    }

    @Bean
    public Md5Realm myShiroRealm() {
        Md5Realm myShiroRealm = new Md5Realm();
        return myShiroRealm;
    }

    @Bean
    public SecurityManager securityManager() {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(myShiroRealm());
        return securityManager;
    }

    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        return shiroFilterFactoryBean;
    }

    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }
}

不知道跟容器是否有关系,这个怎么解决。

阅读 7.6k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题