networksu 2019-05-25 01:52 采纳率: 0%
浏览 7525

springboot+Shiro 发送请求获取subject后getPrincipal就为null了?

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;
    }
}

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

  • 写回答

3条回答 默认 最新

  • networksu 2019-05-27 15:36
    关注

    最后自己解决了前端VUE里面axios没有带sessionid,
    在main.js里面
    axios.defaults.withCredentials = true

    评论

报告相同问题?