您现在的位置是:首页 > java技术交流java技术交流
shiro ajax返回登录成功
上善若水2020-12-19 17:10:33【java技术交流】 2630人已围观
简介shiro默认在我们登录成功后会重定向到用户首页,有些时候,登录是使用ajax完成,登录成功后,会返回给我们登录成功的页面,尽管在ajax中页面不跳转我们可以手动跳转,但是还是有些不爽希望能返回jso
shiro默认在我们登录成功后会重定向到用户首页,有些时候,登录是使用ajax完成,登录成功后,会返回给我们登录成功的页面,尽管在ajax中页面不跳转我们可以手动跳转,但是还是有些不爽希望能返回json登录成功提示.
在网上收集了一些资料,有些是重写onAccessDenied
实现.有些是其他方式.
本篇是重写UserFilter
中的redirectToLogin
实现的.
具体思想是我们在页面进行判断是否ajax请求 是的话我们就不进行跳转,然后我们可以在原始登录控制器中返回登录成功即可.
验证成功后这个控制器就会成功返回登录成功的json
@PostMapping(value = {"/admin/login"})
@ResponseBody
public LayResponse login(@RequestParam Map<String, String> param, HttpSession session) {
//用户认证信息
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(param.get("username"), param.get("password"));
LayResponse response = new LayResponse();
response.success("登录成功");
try {
//进行验证,这里可以捕获异常,然后返回对应信息
subject.login(usernamePasswordToken);
} catch (UnknownAccountException e) {
response.error("用户名不存在!");
} catch (AuthenticationException e) {
response.error("账号或密码错误!");
} catch (AuthorizationException e) {
response.error("没有权限");
} catch (Exception e) {
response.error("其他错误");
}
return response;
}
自定义过滤器代码,仅在非ajax下进行跳转,这样我们就可以在接收到login
控制器返回的json.
package com.springboot.blog.interceptor;
import org.apache.shiro.web.filter.authc.UserFilter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class ShiroLoginFilter extends UserFilter {
@Override
protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestedWith = httpServletRequest.getHeader("X-Requested-With");//判断ajax请求
if (requestedWith == null || !requestedWith.equalsIgnoreCase("XMLHttpRequest")) {
super.redirectToLogin(request, response);
}
}
}
别忘了加我们的写Filter加入配置中.
public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
Map<String, String> map = new HashMap<>();
Map<String, Filter> filters = shiroFilterFactoryBean.getFilters();
filters.put("authc", new ShiroLoginFilter());//添加自定义拦截器
}
完成收工~
Tags: shiro
很赞哦! (1)
相关文章
随机图文
-
哄女孩子开心的幽默笑话!!
1.黑猩猩不小心踩到了长臂猿拉的大便,长臂猿温柔细心地帮其擦洗干净后它们相爱了。别人问起他们是怎么走到一起的?黑猩猩感慨地说:猿粪!都是猿粪啊!2.我说:“你是猪。”你说:“我是猪才怪!”从此我就叫你猪才怪。终于有一天,你忍不住当着众人的面对我吼道:“我不是猪才怪!”3.明天你醒来,枕边躺着一只蚊子,身边有一封遗书,上书:我奋斗了一晚,也没能刺破你的脸,你的脸皮厚得让我无颜活在这世上!主啊 -
ThinkPHP6上传图片七牛云
ThinkPHP6如何上传图片七牛云,如何上传文件到七牛云对象储存cos,总所周知图片是特别消耗网站带宽的,个人网站将图片上传至七牛云才能显著提升网站的响应速度,手把手交大家如何上配置ThinkPHP -
shiro 退出 设置跳转页面
shiro 只带过滤器已经实现了退出功能,我们只需配置下退出后重定向到登录页面即可,而且我们需要写实现退出的控制器方法. @Bean public ShiroFilterFactory -
很幽默很有才的男女喷饭笑话,吃饭千万别看
1、一天,三岁的儿子对妈妈说:“妈妈,什么叫美女?”妈妈说:“像妈妈这样漂亮的女人就叫美女”。旁边的爸爸小声说:“别误导孩子的审美观!!!”2.别人都说我是一枚女汉子,有一天,在路边发现一株蒲公英,突然很想学清纯的女子摘下蒲公英,缓缓的吹一口气,多么小清新的画面呀。可是,事实是这样的,我摘下蒲公英,朱唇轻起,忽然来了一阵妖风,靠,吹了老娘一嘴毛!3.“从前,有三个智者激烈的争辩