Smith-Cruise / Spring-Boot-Shiro

Shiro基于SpringBoot +JWT搭建简单的restful服务
1.64k stars 504 forks source link

org.inlighting.controller.WebController#login #31

Closed langlichong closed 6 years ago

langlichong commented 6 years ago

这个方法感觉没在shiro的机制中,如果直接访问该方法映射的请求,那么整个系统就相当于进行了两次登录操作(一次是该login本身登录逻辑,一次是shiro拦截器引起的登录逻辑),感觉怪怪的,不知道你的想法是啥

kiwiflydream commented 6 years ago

我也发现了这个问题,不太清楚作者的用意,我把 onAccessDenied 修改了一下解决这个问题

   @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
        // 当前请求是否是登录请求
        if (isLoginRequest(request, response)) {
           return true;
        } else {
            loginFailure(response);
            return false;
        }
    }

我的想法是只要是登录接口就放行,无关 get 与 post,如果 get 说明是登录页面,用户自然应该看到,如果是 post 放行后就走到我们的登录 controller,进行了登录处理。

Smith-Cruise commented 6 years ago

额,为了偷懒,没考虑这个问题

kiwiflydream commented 6 years ago

@Smith-Cruise 对了,还一个问题,我不太明白,那个关闭 shiro 自带 session 一定要关吗?我发现我关了之后遇到鉴权注解比如@RequiresRoles就会抛出未认证异常,不会主动调用doGetAuthorizationInfo方法,开启了就会调用

Smith-Cruise commented 6 years ago

没有你这个问题吧,我这里一切都是正常的。

kiwiflydream commented 6 years ago

@Smith-Cruise 谢谢回复,我改动的比较多,可能哪里影响到了,我再看看