springmvc簡單實現許可權控制
1.寫一個自定義註解(功能類似於spring security的@PreAuthorize)
2.寫一個攔截器.package org.exam.auth; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Auth { String value() default ""; String name() default ""; }
處理controller的@RequestMapping方法(這裡的處理直接通過response處理,spring security先拋異常,然後再統一處理異常):package org.exam.auth; import org.springframework.http.HttpStatus; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.util.Set; public class AuthInterceptor extends HandlerInterceptorAdapter { public static final String SESSION_USERID = "kUSERID"; public static final String SESSION_AUTHS = "kAUTHS"; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { boolean flag = true; if (handler instanceof HandlerMethod) { Auth auth = ((HandlerMethod) handler).getMethod().getAnnotation(Auth.class); if (auth != null) {// 有許可權控制的就要檢查 if (request.getSession().getAttribute(SESSION_USERID) == null) {// 沒登入就要求登入 response.setStatus(HttpStatus.FORBIDDEN.value()); response.setContentType("text/html; charset=UTF-8"); PrintWriter out=response.getWriter(); out.write("{\"type\":\"nosignin\",\"msg\":\"請您先登入!\"}"); out.flush(); out.close(); flag = false; } else {// 登入了檢查,方法上只是@Auth,表示只要求登入就能通過
[email protected]("authority")這型別,驗證使用者許可權 if (!"".equals(auth.value())) { Set<String> auths = (Set<String>) request.getSession().getAttribute(SESSION_AUTHS); if (!auths.contains(auth.value())) {// 提示使用者沒許可權 response.setStatus(HttpStatus.FORBIDDEN.value()); response.setContentType("text/html; charset=UTF-8"); PrintWriter out=response.getWriter(); out.write("{\"type\":\"noauth\",\"msg\":\"您沒有"+auth.name()+"許可權!\"}"); out.flush(); out.close(); flag = false; } } } } } return flag; } }
a.如果這個方法沒有使用Auth註解,會認為沒有作許可權控制,任何人可以訪問.
b.如果這個方法只標註了@Auth,如果使用者沒登入,會返回一個403,並提示使用者登入.
c.如果這個方法標註了具體需要某種許可權,如@Auth("authority"),就要求使用者必須有這種許可權,否則返回403,並提示使用者沒有許可權,這裡相當於實現授權,並且授權之前先認證.
3.讓攔截器起作用.重寫org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter#addInterceptors方法
@Configuration
@ComponentScan(basePackages={"org.exam.web"})
@EnableWebMvc
public class MvcConfig extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthInterceptor());
}
//其它略...
}
4.使用者登入(只做了一個模擬登入)和具體使用,剩下的就可以測試了.@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/login")
@ResponseBody
public boolean login(HttpSession session,User user){
boolean result=false;
//模擬從資料庫查出存在這樣的使用者
Long userId=user.getId();
if(userId!=null&&userId>0){
session.setAttribute(AuthInterceptor.SESSION_USERID, userId);
session.setAttribute(AuthInterceptor.SESSION_AUTHS, new HashSet<String>(Arrays.asList("user_list", "user_query", "user_save")));
result=true;
}
return result;
}
@Auth("user_queryXXXX")
@RequestMapping("/query")
@ResponseBody
public String query(){
System.out.println("query");
return getClass().toString();
}
@Auth("user_list")
@RequestMapping("/list")
@ResponseBody
public String list(){
System.out.println("list");
return getClass().toString();
}
@Auth("user_save")
@RequestMapping("/add")
public String add(User user){
System.out.println("add:"+user);
return "user/add";
}
}
相關推薦
springmvc簡單實現許可權控制
用過了Spring Security,一般都不會採用這種簡單的自定義方式.自定義當然靈活自由,越要完善,也就意味做的工作越多.使用框架,別人考慮得相對周到,比如spring security的防止攻擊就有session
如何自定義註解實現簡單的許可權控制
為什麼需要許可權控制? 當一個系統建成之後,需要適當的做一些許可權控制,使得某些非法使用者不能隨意更改系統,而允許某些特權使用者可以作業系統. 一般系統如何實現許可權控制? 一般系統如果許可權較為複雜,可能需要藉助一些許可權控制框架,例如shiro來實現許
springmvc整合shiro許可權控制
一、什麼是Shiro Apache Shiro是一個強大易用的Java安全框架,提供了認證、授權、加密和會話管理等功能: 認證 - 使用者身份識別,常被稱為使用者“登入”; 授權 - 訪問控制; 密碼加密 - 保護或隱藏資料防止被偷窺; 會話
Spring Boot 整合 Shiro實現許可權控制,親測可用,附帶sql
前提: 本文主要講解Spring Boot 與 Shiro的整合 與許可權控制的實現方式(主要以程式碼實現功能為主),主要用到的技術Spring Boot+Shiro+Jpa(通過Maven構建),並不會涉及到Shiro框架的原始碼分析 如果有想要學習Shiro框架的小夥伴可以去http://shiro.
Shiro 整合SpringMVC 並且實現許可權管理,登入和登出
Apache Shiro是Java的一個安全框架。目前,使用Apache Shiro的人越來越多,因為它相當簡單,對比Spring Security,可能沒有Spring Security做的功能強大,但是在實際工作時可能並不需要那麼複雜的東西,所以使用小而簡單
Shiro——實現許可權控制demo思路(包含自定義標籤hasAnyPermission)
在很多系統中需要使用許可權控制,來控制不同角色的人訪問不同的資源。表達能力不好,不喜勿噴! 環境:eclipse4.5.2+oracle11g+hibernate4+spring4+shiro+jboss 原始碼(工程)+ 資料表sql(包含初始化資料)+hibernat
springMVC學習心得及手寫springMVC簡單實現
springMVC學習心得及手寫springMVC簡單實現 Spring 是一個企業級開發框架,為解決企業級專案開發過於複雜而建立的,框架的主要優勢之一就是分層架構,允許開發者自主選擇元件。 Spring 的兩大核心機制是 IoC(控制反轉)和 AOP(面向切面程式設計),從開發的角度
springMVC+velocity做許可權控制 控制到按鈕!
1.spring攔截器配置 <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/privileges/*"/> <mvc:mapping
Taurus.MVC 2.2.3.4 :WebAPI 實現許可權控制認證(及功能增強說明)
前言: 前兩天,當我還在老家收拾行旅,準備回廣州,為IT連的創業再戰365天時, 有網友扣上問:Taurus.MVC中如何實現認證和許可權控制,最好能做個小例子。 我一不小心回了句:等回廣州我再寫篇文章...... 然後,今天就來補文章了〜〜〜〜 Taurus.MVC Nuget 更新: 寫文之前
第7篇:ui-router登入檢查實現許可權控制
做專案時用到了前端登入檢查實現使用者許可權控制,在angularJS外掛中用到了ui-router,可以利用本地儲存實現對登入狀態的監聽,實現如下: 1)登入成功,將登入資訊寫入本地儲存: $.ajax({ type: 'POST',
在Spring Boot中使用Spring Security實現許可權控制
Spring Boot框架我們前面已經介紹了很多了,相信看了前面的部落格的小夥伴對Spring Boot應該有一個大致的瞭解了吧,如果有小夥伴對Spring Boot尚不熟悉,可以先移步這裡從SpringMVC到Spring Boot,老司機請略過。OK,那我們
springboot整合shiro 實現許可權控制
shiro apache shiro 是一個輕量級的身份驗證與授權框架,與spring security 相比較,簡單易用,靈活性高,springboot本身是提供了對security的支援,畢竟是自家的東西。springboot暫時沒有整合shiro,這得自
SpringMVC簡單實現國際化/多語言
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www
Spring專案整合ShiroFilter簡單實現許可權管理
Shiros是我們開發中常用的用來實現許可權控制的一種工具包,它主要有認證、授權、加密、會話管理、與Web整合、快取等功能。我是從事javaweb工作的,我就經常遇到需要實現許可權控制的專案,之前我們都是靠查詢資料獲取列表拼接展示的,還有的是及時的判斷許可權的問
ASP.net Menu控制元件動態新增選單項實現許可權控制
對於動態選單生成,在很多具有許可權控制的專案中非常常見。最近遇到一個需求就是不同使用者具有不同許可權,該許可權是頁面級的,所以需要根據不同使用者的許可權情況動態生成選單項。 首先,我把選單項中的內容先儲存在一個XML裡面,在載入模板頁時只需根據查詢
Spring AOP自定義註解實現許可權控制
1.建立註解類,controller控制層使用該註解進行許可權控制使用 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.R
SpringBoot中使用Spring Security實現許可權控制
Spring Security,這是一個專門針對基於Spring的專案的安全框架,它主要是利用了AOP來實現的。以前在Spring框架中使用Spring Security需要我們進行大量的XML配置,但是,Spring Boot針對Spring Security
spring boot註解實現許可權控制
1、自定義註解 Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RoleCheck { String[] roles() default
NODE + JWT + Mongo(簡單實現許可權管理)
文章目錄 JWT簡介 應用 JWT簡介 官方是這樣介紹的: JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and sel
在前後端分離的專案中,後臺使用shiro框架時,怎樣使用它的會話管理系統(session),從而實現許可權控制
在前後端分離的專案中,ajax跨域和儲存使用者資訊是其中的重點和難點。 如果在後臺使用shiro框架來進行許可權控制,就需要用到cookie+session的模式來儲存使用者的資訊。 在前一篇文章《在前後端分離的專案中,ajax跨域請求怎樣附帶cookie》中,我具體寫了怎