Spring Security 訪問控制-實現 RESTful API
要想實現 Spring Security 返回 JSON 格式串,只需重寫以下幾個處理器(JavaConfig)
- http.exceptionHandling().accessDeniedHandler()
- http.exceptionHandling().authenticationEntryPoint()
- http.formLogin().successHandler()
- http.formLogin().failureHandler()
- http.logout().logoutSuccessHandler()
最終實現的效果為:
//登入失敗(賬號不存在)
{"code":1,"message" :"User is disabled"}
//登入失敗(密碼錯誤)
{"code":1,"message":"Bad credentials"}
//登入成功
{"code":0,"message":"登入成功"}
//訪問拒絕
{"code":1,"message":"Access is denied"}
//登出成功
{"code":0,"message":"已登出"}
//未經授權就訪問資源
{"code":1,"message":"Full authentication is required to access this resource"}
(1)build.gradle 新增專案依賴
compile 'org .springframework.security:spring-security-web:4.2.3.RELEASE'
compile group: 'org.springframework.security', name: 'spring-security-config', version: '4.2.3.RELEASE'
(2)訪問控制配置(JavaConfig):SecurityConfigurer《Filter, WebSecurity> 是 WebSecurityConfigurerAdapter 的父類,Spring Security 會在容器內尋找上述介面的實現類 Bean,因此只要我們新建一個派生類繼承 WebSecurityConfigurerAdapter 並注入容器內,就能被自動配置(經由被重寫的模板方法)
@Configuration
@Import(RootConfig.class)
public class GoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
//......
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.accessDeniedHandler(new GoAccessDeniedHandler())
.authenticationEntryPoint(new GoAuthenticationEntryPoint())
.and().authorizeRequests()
.antMatchers("/", "/csrf").permitAll()
.antMatchers("/hello").hasAuthority("ADMIN")
.anyRequest().authenticated()
.and().formLogin()
.loginProcessingUrl("/login").permitAll()
.successHandler(new GoAuthenticationSuccessHandler())
.failureHandler(new GoAuthenticationFailureHandler())
.and().logout()
.logoutUrl("/logout")
.logoutSuccessHandler(new GoLogoutSuccessHandler())
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
.and().requiresChannel()
.antMatchers("/pomer").requiresSecure()
.anyRequest().requiresInsecure()
.and().rememberMe()
.tokenValiditySeconds(1800)
.key("token_key");
}
}
GoAccessDeniedHandler
public class GoAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response,
AccessDeniedException exception) throws IOException, ServletException {
response.setHeader("Content-Type", "application/json;charset=utf-8");
response.getWriter().print("{\"code\":1,\"message\":\""+exception.getMessage()+"\"}");
response.getWriter().flush();
}
}
GoAuthenticationEntryPoint
public class GoAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
response.setHeader("Content-Type", "application/json;charset=utf-8");
response.getWriter().print("{\"code\":1,\"message\":\""+exception.getMessage()+"\"}");
response.getWriter().flush();
}
}
GoAuthenticationFailureHandler
public class GoAuthenticationFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
response.setHeader("Content-Type", "application/json;charset=utf-8");
response.getWriter().print("{\"code\":1,\"message\":\""+exception.getMessage()+"\"}");
response.getWriter().flush();
}
}
GoAuthenticationSuccessHandler
public class GoAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
response.setHeader("Content-Type", "application/json;charset=utf-8");
response.getWriter().print("{\"code\":0,\"message\":\"登入成功\"}");
response.getWriter().flush();
}
}
GoLogoutSuccessHandler
public class GoLogoutSuccessHandler implements LogoutSuccessHandler {
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
response.setHeader("Content-Type", "application/json;charset=utf-8");
response.getWriter().print("{\"code\":0,\"message\":\"已登出\"}");
response.getWriter().flush();
}
}
相關推薦
Spring Security 訪問控制-實現 RESTful API
要想實現 Spring Security 返回 JSON 格式串,只需重寫以下幾個處理器(JavaConfig) http.exceptionHandling().accessDeniedHandler() http.exceptionHandling().
使用Spring Security和OAuth2實現RESTful服務安全認證
schema repo gradle nbsp tps protect 一個 ndb lac 這篇教程是展示如何設置一個OAuth2服務來保護REST資源. 源代碼下載github. (https://github.com/iainporter/oauth2-provide
使用Spring Security和Thymeleaf實現訪問控制
引入相關依賴 <!--引入thymeleaf與Spring Security整合的依賴--> <dependency> <groupId>org.thymeleaf.extras</group
spring security 3.1 實現權限控制
ref bmi sage pan 管理系統 dao 數據庫 ng- nds spring security 3.1 實現權限控制 簡單介紹:spring security 實現的權限控制,能夠分別保護後臺方法的管理,url連接訪問的控制,以及頁面元
Spring Security 整合freemaker 實現簡單登入和角色控制
寫這篇文章是因為我做了一個電商網站專案,近期剛加上許可權控制。整個過程很簡單,在此給大家梳理一下,也算是自己對知識點的一個總結。 一、需求分析: 我們都知道,電商網站在許可權這一塊,有兩大塊內容: 1、使用者未登入,部分頁面拒絕訪問(
spring boot 實現Restful API
簡單幾步,實現Restful API: 1、引入相關的依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr
spring security oauth2.0 實現
規範 ppi basic final pre 代碼 處理 state 三方 oauth應該屬於security的一部分。關於oauth的的相關知識可以查看阮一峰的文章:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.htm
利用Django實現RESTful API
uri true ima login str blog http 文件中 pps 利用Django實現RESTful API RESTful API現在很流行,這裏是它的介紹 理解RESTful架構和 RESTful API設計指南.按照Django的常規方法當然也可以實
使用Spring Security安全控制
Spring Java Spring Boot 準備工作 首先,構建一個簡單的Web工程,以用於後續添加安全控制,也可以用之前Chapter3-1-2做為基礎工程。若對如何使用Spring Boot構建Web應用,可以先閱讀《Spring Boot開發Web應用》一文。 Web層實現請求映射 @C
怎樣從外網訪問內網RESTful API?
本地部署了RESTful API,只能在區域網內訪問,怎樣從外網也能訪問到本地的RESTful API呢?本文將介紹具體的實現步驟。 準備工作 部署並啟動RESTful API服務端 預設部署的RESTful API服務端埠是80。 實現步驟 下載並解壓holer軟體包 Holer軟體包:hole
Spring Security OAuth2 JWT實現SSO
轉載務必說明出處:https://blog.csdn.net/LiaoHongHB/article/details/84032850 在這裡我們以一臺伺服器和2臺客戶端做測試,在客戶端1進行登陸之後,訪問客服端2的時候不需要進行登陸就可訪問(類
通過Django簡單實現RESTful API
RESTful是一種前後端分離、通過呼叫API介面來實現具體的功能。 在RESTFUl中,每個URL視為一個資源,客戶端通過http動詞,對伺服器資源進行操作。 關於RESTful的概念和原理更詳細的介紹,可以參考下面阮大師的這篇文章,講的非常透徹。連結地址: http://www.
【Myself-Security】SpringMVC 開發 RESTFul API
RestFul API 一般的API都是什麼樣子的呢? 查詢 /user/query?name=tom GET 詳情 /user/getInfo?id=1 GET 建立 /user/create?name=to
Springboot: Springboot + spring boot admin 監控 spring security許可權控制
Springboot admin 很好的提供了對Springboot的監控,但是不建議直接將admin整合到已有的專案中。於是我另起一個專案,考慮到不能讓所有人都能看到這些資料了,於是引入了spring security。 本次使用的是spring-boot-admin-s
Spring Security --- 許可權控制安全框架入門簡介
Spring Security — 許可權控制安全框架入門簡介 一、Spring Security簡介 Spring Security是一個能夠為基於Spring的企業應用系統提供宣告式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中
第六篇:Spring Boot整合Swagger2構建RESTful API文件
由於Spring Boot有快速開發、便捷部署等特性,所以很大一部分Spring Boot的使用者會用來構建RESTfulAPI。而我們構建RESTfulAPI的目的通常都是由於多終端的原因,這些終端會共用很多底層業務邏輯,因此我們會抽象出這樣一層來同時服務於多個移動端或者Web前端。
Spring Security --- 許可權控制安全框架入門簡 介
Spring Security --- 許可權控制安全框架入門簡 介2018年09月20日 20:54:42 sunny2429 閱讀數:17 Spring Security是一個能夠為基於Spring的企業應用系統提供宣告式的安全訪問控制解決方案的安全框架。它提供了一
Spring boot 使用Swagger2構建RESTful API文件
前言 SwaggerUI可以說是一個非常好用的API文件工具,是前後端分離開發模式下的必備工具、具體實現及部分乾貨知識如下 匯入依賴 <!-- RESTful APIs swagger2 --> <dependency> <
Spring Security會話控制(單使用者登入)
在專案開發過程中很難避免說單使用者登入系統,或者說對登入會話進行限制,例如說,只能兩臺機器登入使用者 那麼話不多說,直接看配置程式碼: XML配置 如果你想限制單個使用者訪問你的應用程式的能力。Spring Security通過後面簡單的配置馬
SSM整合系列之 實現RESTFul API
摘要:REST,即Representational State Transfer的縮寫。直接翻譯的意思是"表現層狀態轉化"。它是一種網際網路應用程式的API設計理念:URL定位資源,用HTTP動詞(GET,POST,DELETE,PUT)描述操作。本文將介紹Restful風格API在SS