IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Security 退出登、权限控制 -> 正文阅读

[Java知识库]Security 退出登、权限控制

Security 退出登、权限控制

退出登陆

//@Configuration
public class LogoutSecurityConfig implements WebSecurityConfigurerAdapter {

    //TODO 重点and之前
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.httpBasic()
                .and()
                .logout()
                .logoutUrl("/logout") //退出处理的 url
                .logoutSuccessUrl("/logout/page") //退出成功后,发起的请求,或跳转的页面
                //.logoutSuccessHandler(MyLogOutSuccessHandler) //也可以指定退出成功 处理器自定义退出成功逻辑
                .deleteCookies("deleteCookie") //感觉这步是不是不用写在这

                //TODO能拼接其他的
                .and();
    }
    /*
    默认的退出登陆URL 为 /logout 退出登陆后 spring Security 会有一下处理
    1. 当前sesion 失效
    2. 清楚与当前用户关联的RememberMe 记录
    3. 清空当前 SecurityContext
    4. 重定向到登陆页
     */
}

自定义退出成功处理器需要实现 LogoutSuccessHandler接口

替换.logoutSuccessUrl("/logout/page")

//注入到配置类
@Autowired
private MyLogOutSuccessHandler logOutSuccessHandler;
@Component
public class MyLogOutSuccessHandler implements LogoutSuccessHandler {

    @Override
    public void onLogoutSuccess(HttpServletRequest request,
                                HttpServletResponse response,
                                Authentication authentication) throws IOException, ServletException {
        response.setStatus(HttpStatus.UNAUTHORIZED.value());
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("退出成功,请重新登录");
    }
}

权限控制

开启注解

xml 开启

顺序

  1. @Secured
  2. @RolesAllowed
  3. SqEL : @PreAuthoreize 、 @PostAuthorize 、@PreFilter 、 @PostFilter
<global-method-security secured-annotations="enabled"/> 
<global-method-security jsr250-annotations="enabled"/>
<global-method-security pre-post-annotations="enabled"/>

注解 开启方式

配置类中 @EnableGlobalMethodSecurity(prePostEnabled = true)

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {}

注解说明

@Secured

//需要拥有权限 role_admin 才能访问方法 
//权限是一个 String[],只需要满足其中一个 就可以访问
@Secured("role_admin","..")
public void T(){}

@RolesAllowed

@Secyred功能一样,只是缺少元注解@Inherited

SqEL

@PreAuthorize访问方法前对权限验证
@PreFilter 访问方法前对参数验证
@PostAuthorize 访问方法后验证权限
@PostFilter 方法返回参数验证

//user用户文字小于100。或 是vip
@PreAuthorize("hasRole()'role_user') and form.note.length()<= 100  or hasRole('role_vip')")
public void T(){}

//用户名 lf 才能访问
@PreAuthorize("#user.name.equals('lf')")
public void T(User user){}

//需要admin权限
@PreAuthorize("hasAuthorize('admin')")
public void T(){}

和@PreFilter中 有一个filterObject表示集合中方的对象。

//只返回 偶数id 的结果
@PostFilter("filterObject.id%2==0")
public List<User> seleteAll(){}

多个对象时 使用filterTarget来指定

//指定访问方法的参数
@PreFilter(filterTarget="ids",value="filterObjcet%2==0")
public void delete(List<User> ids,List<role> role){}

自定义权限不足处理器

实现AccessDeniedHandler接口

@Component
public class MyAccessDeniedHandler implements AccessDeniedHandler {
    @Override
    public void handle(HttpServletRequest request,
                       HttpServletResponse response,
                       AccessDeniedException accessDeniedException) throws IOException, ServletException {
        response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("很抱歉,您没有该访问权限");
    }
}

配置类设置

    @Autowired
    private MyAccessDeniedHandler accessDeniedHandler;


....
 http.exceptionHandling()
     .accessDeniedHandler(accessDeniedHandler);

底部

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 11:57:32  更:2022-04-29 11:59:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:06:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码