solon-security-auth
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-security-auth</artifactId>
</dependency>
1、描述
基础扩展插件,为 Solon Auth 提供公共的鉴权接口及应用配置对接。
- 可以直接使用,与业务权限接口适配对接
- 也可通过适配,为其它鉴权插件提供公共的注解、模板标签、基于路径的多账号体系支持。
2、使用示例
- 适配鉴权处理接口(AuthProcessor)
public class AuthProcessorImpl implements AuthProcessor {
@Override
public boolean verifyIp(String ip) {
return false;
}
@Override
public boolean verifyLogined() {
return false;
}
@Override
public boolean verifyPath(String path, String method) {
return false;
}
@Override
public boolean verifyPermissions(String[] permissions, Logical logical) {
return false;
}
@Override
public boolean verifyRoles(String[] roles, Logical logical) {
return false;
}
}
- 定制鉴权适配器和失败处理(其中 addRule 可以没有)
使用时“规则”、“注解”、“模板标鉴”必须要有一样,它们才会触发鉴权。
//构建适配器
@Configuration
public class Config {
@Bean
public AuthAdapter adapter() {
return new AuthAdapter()
.loginUrl("/login") //设定登录地址,未登录时自动跳转
.addRule(r -> r.include("**").verifyIp().failure((c, t) -> c.output("你的IP不在白名单"))) //添加规则
.addRule(b -> b.exclude("/login**").exclude("/_run/**").verifyPath()) //添加规则
.processor(new AuthProcessorImpl()); //设定认证处理器
}
}
//验证失败处理
@Component
public class DemoFilter implements Filter {
@Override
public void doFilter(Context ctx, FilterChain chain) throws Throwable {
try {
chain.doFilter(ctx);
} catch (AuthException e) {
AuthStatus status = e.getStatus();
ctx.render(Result.failure(status.code, status.message));
}
}
}
- 使用注解控制权限
@Mapping("/demo/agroup")
@Controller
public class AgroupController extends BaseController {
@Mapping("")
public void home() {
//agroup 首页
}
@AuthPermissions("agroup:edit")
@Mapping("edit/{id}")
public void edit(int id) {
//编辑显示页,需要编辑权限
}
@AuthRoles("admin")
@Mapping("edit/{id}/ajax/save")
public void save(int id) {
//编辑处理接口,需要管理员权限
}
}
- 使用模板标鉴控制权限(支持所有已适配的后端模板)
关于模板标鉴控制权限的示例,可参考https://gitee.com/noear/solon_auth_demo
<div>
<@authPermissions name="user:del">
我有user:del权限
</@authPermissions>
<@authRoles name="admin">
我有admin角色
</@authRoles>
</div>
3、多套账号体系鉴权
多账号体系鉴权,常见的应用场景:在一个系统里面,前台用户鉴权与后台管理鉴权是两套东西,且又在一起的。
- 多套账号体系鉴权时,可以取消默认的 AuthAdapter 配置
@Configuration
public class Config {
@Bean
public AuthAdapter adapter() { //可以取消默认的,也可以保留。
return ...;
}
}
- 为需要的路径段添加 AuthAdapterSupplier 组件。
比如:后台管理域为:/admin/ 路径段;其它为用户路径段。
//用户模块
@Component
public class UserAuthAdapterSupplierImpl implements AuthAdapterSupplier{
final AuthAdapter userAuth;
public UserAuthAdapterSupplierImpl(){
userAuth = new AuthAdapter()
.loginUrl("/login") //设定登录地址,未登录时自动跳转
.addRule(b -> b.exclude("/login**").exclude("/_run/**").exclude("/admin/**").verifyPath()) //添加规则
.processor(new UserAuthProcessorImpl()); //设定认证处理器
}
@Override
public String pathPrefix() {
return "/"; //相当于所有 / 开头的路都是。但在匹配时,会先匹配长的pathPrefix匹配。
}
@Override
public AuthAdapter adapter(){
return userAuth;
}
}
//管理模块
@Component
public class AdminAuthAdapterSupplierImpl implements AuthAdapterSupplier{
final AuthAdapter adminAuth;
public AdminAuthAdapterSupplierImpl(){
adminAuth = new AuthAdapter()
.loginUrl("/admin/login") //设定登录地址,未登录时自动跳转
.addRule(r -> r.include("/admin/**").verifyIp().failure((c, t) -> c.output("你的IP不在白名单"))) //添加规则
.addRule(b -> b.include("/admin/**").exclude("/admin/login**").verifyPath()) //添加规则
.processor(new AdminAuthProcessorImpl()); //设定认证处理器
}
@Override
public String pathPrefix() {
return "/admin/";
}
@Override
public AuthAdapter adapter(){
return adminAuth;
}
}
4、更多参考
具体可参考:《学习/Solon Web 开发/Web 鉴权》