Authority 是一个集成权限控制与单点登录的系统。
Authority 由以下三部分组成:
- authority-service 提供用户与权限的 restful api 服务
- authority-web 权限管理后台
- authority-plug 权限插件
这里还需要 Cas 单点登录服务器,在这里 Cas 单点登录服务器
环境要求:
- java8+
- mysql
一些基本参数说明:
- 单点登录服务器 CAS 域名: http://sso.localcodeblog.net (根据需要配置为你自己的域名)
- 权限管理后台域名: http://authority.localcodeblog.net (根据需要配置为你自己的域名)
由于 CAS 要求必须使用 https 协议,所以我们需要生成 https 证书:
生成证书详细步骤可以参考这里: CAS单点登录证书配置,该文章中 CAS 单点登录域名为 sso.com, 这里需要修改为我们自己的域名,在这里是: sso.localcodeblog.net
Nginx 配置:
server{
listen 80;
server_name authority.localcodeblog.net;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://authority.localcodeblog.net:8083/;
}
}
server{
listen 80;
listen 443 ssl;
ssl_certificate /opt/keystore/sso.localcodeblog.net.crt;
ssl_certificate_key /opt/keystore/sso.localcodeblog.net.key;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
server_name sso.localcodeblog.net;
location / {
proxy_pass http://sso.localcodeblog.net:8082/;
}
}
在代码根目录下: authority_structure.sql 是权限表结构文件,authority_data.sql 是基本管理后台和一些测试用户权限数据。在 mysql 客户端分别执行这两个文件。
在以上步骤中我们已经完成了单点登录证书,与 nginx 中为单点登录服务器与管理后台的反向代理配置后,接下来是完成代码中的一些相关配置,然后启动。
在 WEB-INF/spring-configuration/applicationContext-db.xml 中:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/authority?useUnicode=true&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="llhua123" />
<property name="maxActive" value="30" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="10" />
<property name="testOnBorrow" value="true" />
</bean>
修改为自己的相关配置。
spring.datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/authority?useUnicode=true&characterEncoding=UTF-8
username: root
password: llhua123
max-active: 30
spring.jersey.type: servlet
mybatis:
config-location: classpath:mybatis/sqlMapConfig.xml
logging:
#日志路径
file: /home/huoshan/log/authority.log
level.root: DEBUG
server:
port: 9000
在这里只需更需自己需求修改数据库配置和日志路径即可
logging:
file: /home/huoshan/log/authority_web.log
level.root: DEBUG
spring.freemarker:
cache: false
charset: UTF-8
enabled: true
suffix: .ftl
server:
port: 8083
authority.service.rest.baseurl: http://localhost:9000/api
cas.server:
login.url: https://sso.localcodeblog.net
logout.url: https://sso.localcodeblog.net/logout
platform.sign: AUTHORITY
authority.service.rest.url: http://localhost:9000/api
spring.security.logout.url: /j_spring_cas_security_logout
denied.page: /403
security.basic.enabled: false
在这里只需根据自己需求修改单点登录域名与 authority-service 地址和日志存放路径即可。
在 hosts 文件中配置映射:
127.0.0.1 sso.localcodeblog.net
127.0.0.1 authority.localcodeblog.net
将 Cas 单点登录服务器 部署到 Tomcat 中, 将 server.xml 文件中
<Context docBase="cas-server" path="/" reloadable="true" source="org.eclipse.jst.jee.server:cas-server"/></Host>
中 path 修改为 / 根路径。
- 启动 Cas 服务器。
- 启动 authority-service
- 启动 authority-web
在浏览器中访问: http://authority.localcodeblog.net/ 显示结果:
默认用户名密码:
1416236046@qq.com 123456
登录后:
authority-plug 会使用到 authority-service restful 服务
authority-web 也会使用到 authority-service restful 服务,由于管理后台还要求有权限管理与单点登录功能,所以也会依赖到 authority-plug
authority-pug 只是一个权限插件,以后如果要添加一个新的应用,只需在 pom.xml 中依赖 authority-plug 并在 application.yml 中添加以下配置:
authority.service.rest.baseurl: http://localhost:9000/api
cas.server:
login.url: https://sso.localcodeblog.net
logout.url: https://sso.localcodeblog.net/logout
platform.sign: AUTHORITY
authority.service.rest.url: http://localhost:9000/api
spring.security.logout.url: /j_spring_cas_security_logout
denied.page: /403
security.basic.enabled: false
新的应用便拥有了单点登录与权限控制功能,权限管理只需在 authority-web 中添加新的平台与相应资源和角色配置即可。
Note:
我们每个新添加的平台都需要在 Cas-Server 的 WEB-INF/json/ 下添加新的 json 文件将平台注册到单点登录服务器中.