前端部分
修改src/permission.js文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| //需要设置令牌 import { getToken, setToken } from '@/utils/auth' //获取令牌参数 const token = to.query.token if (token) { //前端存储令牌 store.commit('user/SET_TOKEN', token) setToken(token) //避免显示令牌 next(to.path) } //跳转后端登录 window.location.href = process.env.VUE_APP_BASE_API + '/user/login?redirect=' + encodeURIComponent(window.location.href)
|
修改src/utils/request.js文件
1 2
| //修改令牌参数 config.headers['X-Auth-Token'] = getToken()
|
修改vue.config.js文件
1 2
| //代理后端服务 target: `http://localhost:8080`,
|
修改src/layout/components/Navbar.vue文件
1 2
| //跳转登出地址 window.location.href = process.env.VUE_APP_BASE_API + '/user/logout?redirect=' + encodeURIComponent(window.location.href)
|
后端部分
修改pom.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| //引入Spring-Session依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> //引入Cas-Client依赖 <dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.5.1</version> </dependency>
|
修改application.properties文件
1 2 3 4 5 6
| //配置Spring-Session参数 spring.session.store-type=redis spring.redis.host=192.168.99.230 spring.redis.password=bessky123 spring.redis.port=6379 spring.redis.database=15
|
修改Application.java文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| //启用Spring-Session的REST模式 @Bean public HttpSessionIdResolver httpSessionIdResolver() { return HeaderHttpSessionIdResolver.xAuthToken(); } //单点登录配置 @Bean public FilterRegistrationBean<Cas30ProxyReceivingTicketValidationFilter> cas30ProxyReceivingTicketValidationFilter() { FilterRegistrationBean<Cas30ProxyReceivingTicketValidationFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new Cas30ProxyReceivingTicketValidationFilter()); registration.addInitParameter("casServerUrlPrefix", "https://erp.ser.ltd/sso"); registration.addInitParameter("serverName", "http://localhost:8080"); registration.addInitParameter("redirectAfterValidation", "false"); registration.addUrlPatterns("/*"); return registration; } @Bean public FilterRegistrationBean<AuthenticationFilter> authenticationFilter() { FilterRegistrationBean<AuthenticationFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new AuthenticationFilter()); registration.addInitParameter("casServerUrlPrefix", "https://erp.ser.ltd/sso"); registration.addInitParameter("serverName", "http://localhost:8080"); registration.addUrlPatterns("/*"); return registration; } @Bean public FilterRegistrationBean<HttpServletRequestWrapperFilter> httpServletRequestWrapperFilter() { FilterRegistrationBean<HttpServletRequestWrapperFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new HttpServletRequestWrapperFilter()); registration.addUrlPatterns("/*"); return registration; }
|
增加UserController.java文件
//模拟前端数据
@RestController
@RequestMapping("user")
public class UserController
{
@RequestMapping("login")
public void login(String redirect, HttpServletResponse response, HttpSession session) throws IOException
{
response.sendRedirect(redirect + "?token=" + session.getId());
}
@RequestMapping("logout")
public String logout(String redirect, HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException
{
session.invalidate();
if (redirect != null && !"".equals(redirect))
{
// 获取单点登出地址
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
if (principal != null)
{
Map<String, Object> attributes = principal.getAttributes();
if (attributes != null)
{
String logoutUrl = (String) attributes.get("logout_url");
if (logoutUrl != null && !"".equals(logoutUrl))
{
// 重定向到单点登录退出
logoutUrl = logoutUrl + "?service=" + redirect;
response.sendRedirect(logoutUrl);
}
}
}
}
return "{\"code\":20000,\"data\":\"success\"}";
}
@RequestMapping("info")
public String info(HttpSession session)
{
System.out.println(session.getId());
return "{\"code\":20000,\"data\":{\"roles\":[\"admin\"],\"introduction\":\"I am a super administrator\",\"avatar\":\"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif\",\"name\":\"Super Admin\"}}";
}
}