社区
Web 开发
帖子详情
被shiro拦截的请求
chanchaw
2018-12-01 11:30:29
前端发送的请求被shiro拦截的时机是什么时候?
我在类LoginController中的方法isLogined()的第一行使用了打印(system.out.println)
然后从前端发送一个没有权限的请求,结果方法isLogined()的第一行都没有打印
当把该请求从拦截器的策略队列中移除后,是可以进入这个方法的
这么说来,没有权限的请求都不会进入控制器的方法内?
那前端如何得知请求的不成功是由于没有权限还是程序出错?
...全文
443
3
打赏
收藏
被shiro拦截的请求
前端发送的请求被shiro拦截的时机是什么时候? 我在类LoginController中的方法isLogined()的第一行使用了打印(system.out.println) 然后从前端发送一个没有权限的请求,结果方法isLogined()的第一行都没有打印 当把该请求从拦截器的策略队列中移除后,是可以进入这个方法的 这么说来,没有权限的请求都不会进入控制器的方法内? 那前端如何得知请求的不成功是由于没有权限还是程序出错?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Dark_Zhou
2018-12-02
打赏
举报
回复
shiro的拦截是执行不到方法的,和过滤器是一个效果。你可以通过shiro的配置自定义一个未登陆的拦截路径 // 未授权界面; shiroFilterFactoryBean.setUnauthorizedUrl(ShiroConstant.UNAUTHORIZED_URL); 然后自己重写这个路径下的逻辑,类似这样 /** * 无登录权限时跳转,配合ajax请求使用 * @Author: ZZ * @Date: 2018/11/14 15:39 * @return */ @ResponseBody @RequestMapping("/noAuthc") public ResultInfo noAuthc(HttpServletResponse response){ response.setHeader("sessionStatus", "noAuthc"); return ResultInfo.failure(); } 前端可以这样判断 //判断是否登录 $.ajaxSetup({ contentType:"application/x-www-form-urlencoded;charset=utf-8", complete:function(XMLHttpRequest,textStatus){ var sessionstatus = XMLHttpRequest.getResponseHeader("sessionStatus"); if(sessionstatus=="noAuthc"){ window.location.replace("/login"); } } }); 具体逻辑可以自己编写,这里只是一个实现思路,应该能满足你的要求
小码哥学习中
2018-12-02
打赏
举报
回复
给你一段测试代码参考一下:
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ShiroTest {
private static final transient Logger log =
LoggerFactory.getLogger(ShiroTest.class);
public static void main(String[] args) {
//1. 这里的SecurityManager是org.apache.shiro.mgt.SecurityManager
// 而不是java.lang.SecurityManager
// 加载配置文件
Factory<SecurityManager> factory =
new IniSecurityManagerFactory("classpath:shiro.ini");
//2.解析配置文件,并且返回一些SecurityManger实例
SecurityManager securityManager = factory.getInstance();
//3.将SecurityManager绑定给SecurityUtils
SecurityUtils.setSecurityManager(securityManager);
// 安全操作,Subject是当前登录的用户
Subject currentUser = SecurityUtils.getSubject();
// 测试在应用的当前会话中设置属性
Session session = currentUser.getSession();
//放进去一个key和一个value
session.setAttribute("someKey", "aValue");
//根据key拿到value
String value = (String) session.getAttribute("someKey");
if ("aValue".equals(value)) {//比较拿到的值和原来的值是否一致
log.info("检索到正确的值[" + value + "]");
}
//尝试进行登录用户,如果登录失败了,我们进行一些处理
if (!currentUser.isAuthenticated()) {//如果用户没有登录过
//new UsernamePasswordToken(用户名,密码)
UsernamePasswordToken token =
new UsernamePasswordToken("test", "123456");
token.setRememberMe(true);//是否记住用户
try {
currentUser.login(token);
//当我们获登录用户之后
log.info("用户 [" + currentUser.getPrincipal() + "] 登陆成功");
// 查看用户是否有指定的角色
if (currentUser.hasRole("admin")) {
log.info("您有admin角色");
} else {
log.info("您没有admin角色");
}
if (currentUser.hasRole("role1")) {
log.info("您有role1角色");
} else {
log.info("您没有role1角色");
}
// 查看用户是否有某个权限
if (currentUser.isPermitted("perm1")) {
log.info("您有perm1权限");
} else {
log.info("您没有perm1权限");
}
if (currentUser.isPermitted("guest")) {
log.info("您有guest权限");
} else {
log.info("您没有guest权限");
}
//登出
currentUser.logout();
} catch (UnknownAccountException uae) {
log.info(token.getPrincipal() + "账户不存在");
} catch (IncorrectCredentialsException ice) {
log.info(token.getPrincipal() + "密码不正确");
} catch (LockedAccountException lae) {
log.info(token.getPrincipal() + "用户被锁定了 ");
} catch (AuthenticationException ae) {
//无法判断是什么错了
log.info(ae.getMessage());
}
}
}
}
chanchaw
2018-12-02
打赏
举报
回复
感谢回复,自己测试下看
基于
Shiro
拦截
URL,实现权限控制
NULL 博文链接:https://vti-iteye.iteye.com/blog/1963397
spring boot整合
shiro
实现url
请求
过滤
本demo为Spring boot整合
shiro
,以mybatis plus做dao层交互数据,实现了读取数据库用户数据实现用户登录,权限认证,读取数据库中用户对应的url
请求
,实现
请求
的过滤。自定义了relam和过滤器来实现这些功能
shiro
登录
拦截
校验demo
自己做的一个
shiro
登录校验、权限
拦截
的demo
Shiro
和AJAX完美整合
Shiro
和AJAX完美整合
SpringBoot +
Shiro
实现前后端全分离接口安全框架
SpringBoot-
Shiro
前后端分离框架,通过
shiro
控制权限,实现前后端全分离接口安全。
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章