NutzCN Logo
问答 前后端分离怎么用shiro
发布于 2689天前 作者 tanshaohua 3929 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

我用nutz 做了一个应用,分了三层为dao,service,rest 前端用vue.js写的,前端ajax请求登录后shiro怎么做权限控制?

11 回复

这对cookie有什么影响吗?

您的意思是我把登录后的userId返回到前端,存入cookie,每次ajax请求时传到rest层做一下对比?

这样问原因是开发的时候有跨域的问题?

有跨域问题所有rest方法都加了@Filters(@By(type=CrossOriginFilter.class))

我在有权限的方法加了@RequiresAuthentication
就是想看看
登录后能不能访问它

结果不能访问,我现在不知道怎么做了

加@RequiresGuest的方法能访问

//测试shiro注解
@At
@Filters(@By(type=CrossOriginFilter.class))
@GET
@RequiresAuthentication
public boolean updateAccount(){
log.debug("测试shiro注解");
return true;
}

@At
@GET
@Filters(@By(type=CrossOriginFilter.class))
@RequiresGuest
public boolean signUp(){
    log.debug("测试shiro注解 Guest 权限");
    return false;
}

登录
@At
@AdaptBy(type=JsonAdaptor.class)
@Filters(@By(type=CrossOriginFilter.class)) // 覆盖UserModule类的@Filter设置,因为登陆可不能要求是个已经登陆的Session
@POST
@Ok("json") //输出用json格式
public boolean login(@Param("username") String username,
@Param("password") String password ){
if (Strings.isBlank(username) || Strings.isBlank(password)){
log.debug("username or password is null");
return false;
}
int userId = userService.fetch(username, password);
if (userId < 0){
log.debug("no such user = " + username);
return false;
} else {
//添加token为后来的权限做验证
SecurityUtils.getSubject().login(new SimpleShiroToken(userId));
return true;
}
}

所以,你需要解决的应该是:开发期也不跨域

因为生产环境你不会把前后端部署到不同域名/端口的,不会有跨域问题。

既然基于vue开发,估计也是nodejs开发工具,在dev.js里面可以配proxy,把动态请求通通代理到tomcat/jetty的端口,自然就没有跨域及你困惑的cookie等问题,自行谷歌一下吧

这样呀!!!!!

添加回复
请先登陆
回到顶部