您现在的位置是:首页 > java技术交流java技术交流
shiro ajax返回登录成功
上善若水2020-12-19 17:10:33【java技术交流】 2202人已围观
简介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)
相关文章
随机图文
-
20个抖音撩妹笑话段子套路
我在找一封信。什么信?你的微信。 落叶归根,我归你。 情不知所起一往而深。 我明白你会来,所以我等。 你是非常可爱的人,真应该遇到最好的人,我也真希望我就是。 Mg+ZnSO4=Zn+MgSO4 她曾经也是一个连水瓶盖都拧不开的小公主 现在却顶起了我的大 -
幽默故事二
-01-父亲丢了块表,他抱怨着翻腾着四处寻找,可半天也找不到。等他出去了,儿子悄悄进屋,不一会儿就找到了表。父亲问:怎么找到的?儿子说:我就安静地坐着,一会儿就能听到滴答滴答的声音,表就找到了。我们越 -
逗女生开心的笑话
1.有一天有个婆婆坐车,做到中途婆婆不认识路了,婆婆用棍子打司机的屁股说:这是哪?司机:这是我的屁股……2.甲:那个人在干什么?乙:他在发抖。甲:他为什么要发抖了?乙:他冷丫。甲:哦,原来发抖就不会冷啦!3.妻:我真是瞎了眼踩到狗屎才会嫁给你。夫:我真是瞎了眼踩到狗屎才会娶你。狗屎:我好倒霉哦!躺倒那里都会被你两踩到 -
幽默笑话:先生,您说还有什么东西比音乐更美妙的吗?
1、一天杜邦去参加音乐会,他旁边的一位女士唠叨个不停。贝多芬的交响乐演奏到高潮时,她突然对杜邦说:“啊!先生,您说还有什么东西比音乐更美妙的吗?”“有的,太太。”他回答说,“安静!”2、一日,刚刚下课不久,小明便和同桌小雨口漠横飞的谈论起了网络里面的东东,场面好不热闹。这时,小雨突然若有所思的问小明:“你说我是恐龙吗?”小明从头到脚仔细观察了一边小雨,很迷惑的答到:“是不是你要问我你是哪