package com.mango.jtt.springSecurity;
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.savedrequest.HttpSessionRequestCache;
import org.springframework.security.web.savedrequest.RequestCache;
import org.springframework.security.web.savedrequest.SavedRequest;
import com.mango.jtt.po.MangoUser;
import com.mango.jtt.service.IUserService;
/**
* 登录授权成功后操作控制,如果是直接点击登录的情况下,根据授权权限跳转不同页面; 否则跳转到原请求页面
*
* @author HHL
* @date
*
*/
public class MyAuthenticationSuccessHandler extends
SavedRequestAwareAuthenticationSuccessHandler {
private Map<String, String> authDispatcherMap;
private RequestCache requestCache = new HttpSessionRequestCache();
@Autowired
private IUserService userService;
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
// 获取用户权限
Collection<? extends GrantedAuthority> authCollection = authentication
.getAuthorities();
if (authCollection.isEmpty()) {
return;
}
// 认证成功后,获取用户信息并添加到session中
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
MangoUser user = userService.getUserByName(userDetails.getUsername());
request.getSession().setAttribute("user", user);
String url = null;
// 从别的请求页面跳转过来的情况,savedRequest不为空
SavedRequest savedRequest = requestCache.getRequest(request, response);
if (savedRequest != null) {
url = savedRequest.getRedirectUrl();
}
// 直接点击登录页面,根据登录用户的权限跳转到不同的页面
if (url == null) {
for (GrantedAuthority auth : authCollection) {
url = authDispatcherMap.get(auth.getAuthority());
}
getRedirectStrategy().sendRedirect(request, response, url);
}
super.onAuthenticationSuccess(request, response, authentication);
}
public RequestCache getRequestCache() {
return requestCache;
}
public void setRequestCache(RequestCache requestCache) {
this.requestCache = requestCache;
}
public Map<String, String> getAuthDispatcherMap() {
return authDispatcherMap;
}
public void setAuthDispatcherMap(Map<String, String> authDispatcherMap) {
this.authDispatcherMap = authDispatcherMap;
}
}
Herman-Hong
- 粉丝: 548
- 资源: 5
最新资源
- 基于IronPython的股票技术分析系统详细文档+全部资料+高分项目.zip
- 基于PaddleNLP搭建评论观点抽取和属性级情感分析模型,并基于前后端分离式架构完成属性级情感分析Web系统搭建,通过细粒度情感分析帮助用户和商家更好决策。详细文档+全部资料+高分项目.zip
- 基于pyltp的工具中文依存句法的四大名著人物情节分析系统、实现了人物篇幅分析,故事发生地分析,主要人物情绪变化分析,人物互动情况分析.详细文档+全部资料+高分
- 基于Saprk的用户行为分析系统详细文档+全部资料+高分项目.zip
- 基于Qt的学生信息管理系统。教师端:支持增删查改,班级成绩分析。学生端:查看成绩。详细文档+全部资料+高分项目.zip
- 基于RT-Thread系统的空气质量分析仪详细文档+全部资料+高分项目.zip
- 基于spark streaming和kafka,hbase的日志统计分析系统详细文档+全部资料+高分项目.zip
- 基于Spring Boot的在线问卷调查系统,登录注册、调查问卷模板、创建调查问卷、在线编辑模板、社交网站分享问卷、问卷结果分析与统计(图表展示)以及个人中心等
- 基于Strom的日志实时流量分析主动防御(CCFirewall)系统详细文档+全部资料+高分项目.zip
- 基于SpringBoot Mybatis 的毕业生就业信息分析系统详细文档+全部资料+高分项目.zip
- 基于Spring+SpringMVC+Mybatis+redis+Vue+Swagger2小程序商城+(vue)微信商城+综合管理后台+网站商城+运营商平台+A
- 基于Strom的实时流量分析防火墙系统详细文档+全部资料+高分项目.zip
- 基于tfs2.2.16代码,添加注释和分析,学习分布式存储系统详细文档+全部资料+高分项目.zip
- 基于ThinkPhp5.0+Vue开发的一套新零售直播点播知识付费系统,销推广关系管理+营销+直播的知识类电商系统,能够快速积累客户、会员数据分析、智能转化客户
- 基于UIE的舆论情感分析Web系统,支持单文本属性级情感分析及上传txt文件进行批量情感分析,并支持分析结果的可视化展示。 技术栈:后端:FastAPI + U
- 基于thinkphp和mysq舆情分析系统,详细文档+全部资料+高分项目.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈