server: ssl: enabled: false port: 8443 use-forward-headers: false cas: # 显式声明 CAS 自身访问地址,避免根路径 / 或 /index.html 被重定向到错误端口(曾出现跳到 8080 的问题)。 # CAS 的默认值是 https://cas.example.org:8443,若运行时被外部配置覆盖成 8080,根页面重定向就会错位。 server: name: http://localhost:8443 prefix: http://localhost:8443/cas # CAS 核心配置 tgc: secure: false # 显式指定 TGC Cookie 的 Path,必须覆盖 /cas 下所有路径(含自定义 /cas/api/login)。 # 若不配置,CAS 默认会把 Path 留空,浏览器按“请求目录”取值: # - 标准登录在 /cas/login 种 Cookie -> Path=/cas/ -> 正常 # - 自定义登录在 /cas/api/login 种 Cookie -> Path=/cas/api/ -> 跳到 /cas/login 时浏览器不带此 Cookie,导致还要再登录 path: /cas # 固定 TGC 加密/签名密钥。不配置的话每次重启都会自动生成新密钥, # 导致浏览器里旧 TGC Cookie 解密失败(表现为启动后首次访问的 NPE DEBUG 噪声),且启动日志反复 WARN。 crypto: encryption: key: 7qLRih0bq6I_A7MehkJVtD4c9foKUFUgU0Py8BvmX9w signing: key: RVYx5M5u-Wu6WPNz1C-PSpCDPlnJ7Z9rvaVfaWLJlbddhcKnUhiluW4Z2S4XgnV3ya6DydtBeS55cnKwFkgzZw # 固定 Webflow 加密/签名密钥,理由同上 webflow: crypto: encryption: key: VgGmJuzf2Xbk2Pn0ZrEMVw signing: key: 48ES4odoN40R9JPlIIcxbOWCHBngCTolqEypXuS86WUjNa1eccI6_f7e3GoQur04ki9Tu7PbFs1XO3FdN1Q_Mw serviceRegistry: initFromJson: true # 登出后允许按 ?service= 参数跳转到指定地址(如回到登录页) logout: followServiceRedirects: true # 认证配置 authn: # JDBC 认证配置 jdbc: query[0]: sql: select * from sys_user where username=? fieldPassword: password fieldDisabled: disabled fieldExpired: expired url: jdbc:mysql://localhost:3306/bsch_userbase?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai user: root password: 123456 driverClass: com.mysql.jdbc.Driver dialect: org.hibernate.dialect.MySQLDialect # 密码加密策略:与自定义登录保持一致,使用 BCrypt(strength 10) # 这样 establishSsoSession 调用 CAS 认证链重新校验密码时也能通过 passwordEncoder: type: BCRYPT strength: 10 spring: # 排除 Spring Boot 的 SecurityAutoConfiguration。 # 原因:overlay 的 pom 把 spring-security-config/web 设成 compile 进了 war, # 而 CasWebApplication 的 @SpringBootApplication(exclude=...) 里并未排除 SecurityAutoConfiguration # (CAS 原本不依赖 spring-security-config,webapp 不自带它)。 # 一旦 spring-security-config 在 classpath,SecurityAutoConfiguration 就会激活, # 注册默认 SecurityFilterChain 拦截 /cas/login,用默认登录页 + 默认凭据(user/随机密码)接管认证, # 导致 CAS webflow 的 accept-users/JDBC handler 完全失效,登录必报 "Reason: none"。 # 排除后没有任何 Spring Security filter chain,/cas/login 由 CAS webflow 正常处理。 autoconfigure: exclude: - org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration - org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration - org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration redis: host: localhost port: 6379 password: 123456 database: 0 timeout: 5000 jedis: pool: max-active: 8 max-idle: 8 min-idle: 0 logging: level: # 排查问题时可临时改为 DEBUG;DEBUG 会打出海量日志,Windows 控制台同步输出会把启动拖慢到几分钟 org.apereo.cas: INFO custom: rsa: public-key: | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqytbHgQWZQmkwmp6WncV aUmUNgExYDB0Sp8h1qfyKfufbX2MEM6UzSPQHIwurFqkzcHljdrGDCXWZ2Xv8c8C 27+MOPLf4VyYQ7invqtvmEwS6c3km4QqQVdrh0DJjVYhgO8reE8LhlDFc9Vh9Fwy Sb8pbC1EM0s2lN6ig7/9NR8+CqxW61ku+7VYnLzcRgpc0cF3K/mQwAjVf1pKjGtP G1mpLNcHpT2yp5u950GfFtdqYgAte7k4CDlwMDKfpf+2Pg5kZAzogO5DTq/QolOW qjZfgT2wBNpYVT+3glbhhRbc9T3/SqFeT9KlXcamBXLvKI6WuKxlAEeKTiosUgMK CQIDAQAB private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCrK1seBBZlCaTCanpadxVpSZQ2ATFgMHRKnyHWp/Ip+59tfYwQzpTNI9AcjC6sWqTNweWN2sYMJdZnZe/xzwLbv4w48t/hXJhDuKe+q2+YTBLpzeSbhCpBV2uHQMmNViGA7yt4TwuGUMVz1WH0XDJJvylsLUQzSzaU3qKDv/01Hz4KrFbrWS77tVicvNxGClzRwXcr+ZDACNV/WkqMa08bWaks1welPbKnm73nQZ8W12piAC17uTgIOXAwMp+l/7Y+DmRkDOiA7kNOr9CiU5aqNl+BPbAE2lhVP7eCVuGFFtz1Pf9KoV5P0qVdxqYFcu8ojpa4rGUAR4pOKixSAwoJAgMBAAECggEBAJsnYJ9zmw0Y0bS8qY2I9eqLHIJbUHNdWHwvhI+7ikHN6HRp4eV2K+FK/iByXPgz7cDoafjMfsqSHad5+iZYu8GO/j68wHzZ3tc78Sle4nfNNTOjQv5Irbiu0jQ2YLvxf8sMgH28QLkOS/y0RecnDxpT4etBmNlZ6u7EY9FC3PUhkTCb2Ioy+xhA9FNZLc9awmzuqLZMkhUThspRmEFoBDgQV/U0o9OVVi3nEecEUvOCQpv3kwpDZMJECNPxY+qnGs3uKl6hbWXVhhqO9XKOu3wN2AJmakugcBSD6NpFu+C+BOah/kMlcrUXgVQUeObhwXfQjrw4CNyrD1AVvtVWfwECgYEA4Q38R60oZtZqEXz2KvhOM4uvD3def+IrLa6xnjHtqOQ1m7Ok1wLvhVW3P37/HyYyuq3EhRo2drD1qI58wZ9QAvFSnrNMHwqbaYew4OciFs28zPcYgRR1dLEOcz/WBbqhixClrJX22imil/eqxktDamDetSlkKo9F+rInzQukWykCgYEAwrSWRGLjHdQYmeBShOFKb+OPAR2198QTZPN5DmNXVgRfp+cb7FQ7Mw8ZndpDlfu7ARTwhNv0y3piCj8bJtm7BgXaQowwTR0AxRDkqF6fUNVqKEyE25G1hhE2NCD/4b+rAO8IaCCNnjSvAWhXjg7sQHBngJhFxYY68NQx6wuv8+ECgYA9KcLda/bl8/HBrPdt+CuwoI7EIknhcYMQmECXYLRZSSQ0m575/EdCMmhp7kbBnWz+BQm6rsQMf81TsN3A9V4WXqV4kfvnF8fi50iv5sEB94oPHjxfoELHovLtaXTt+6m5lJ2iCOOcqOIScPHNkFjTCV6dV5Fsa6G2H0Ln2/kf+QKBgBJVZMzdrtsRLJvYpoyCljrA56dIP+krmlPoJR74tbGQyd0KgvOW3tgo9NWLRs/pmys36InqGDvMs0yZspnO6LBhfrLDdozcTUVBGPbNqhy3a76Nrfjq2HfeSQdRkCaWoKh+2YDMh+k8trngNFZZC1/p9aUDMZau0//3SxgByrihAoGAPyOKhvPuoQfkbe6kyqGOZoPmctr5mQiHAPzNoKQkGD0pAGrId77KfDjPY8qM0ZTCLuYUJHy3ISefgHKANHLBgPlQasHo6t2f5Wk/173ju+cruW07APe3imXeGkpL4cg4n1YWvSAkwr4GoDXvTd6uL15zM452oxcW8p4hdoITaP0= login: # 登录成功(无 service 参数)时的默认落点。必须是静态前端页,绝不能指向 CAS 原生登录页 # (/cas/login 或 /login)——否则登录成功会被甩回 CAS 登录页形成死循环。 # 该值会被打包进 WAR 的 classpath application.yml,且会覆盖 LoginController 中 @Value 的默认值, # 所以这里必须显式写成前端页路径。业务系统带 service 参数时仍走各自回跳地址。 default-redirect-url: /front/index.html # 是否强制每次登录都必须校验验证码。 # false(默认)/ 不配置:维持原逻辑,仅当同一会话登录失败达到阈值后才要求验证码。 # true:任何登录(含首次)都必须携带并校验验证码,用于彻底阻断批量账号枚举探测。 always-captcha: false