前端部分

修改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\"}}";
}
}