一种基于注解的Spring MVC权限控制方法
2016-10-17 20:58
405 查看
阅读目录
1.建立权限枚举类
2.登录方式的枚举类
3.建立表示权限annotation类
4.在user类中加入权限字段
5.权限验证算法
6.建立控制权限的interceptor类
7.配置interceptor类
8.标注需要控制权限的方法
9.完成了
本文介绍一种采用annotation来对spring-mvc进行权限控制的方法.通过枚举类来定义权限项.将annotation标注到需要控制权限的spring-mvc方法上.然后,在spring-mvc中定义全局过滤器,过滤所有spring-mvc方法,查看方法上的权限annotation信息,以此对权限进行控制.
编写比较方便,在需要控制权限的方法上进行annotation的标注即可,ide能够对annotation进行识别支持.查看权限配置比较方便,因为annotation就在方法上,不用去其他地方翻看.实现方式比较简单.
建立权限枚举类型,用于描述权限的种类,包含了权限的名称.每个枚举值中包含了权限中文名称和权限索引值(即权限位).(思考:是否可以直接用中文名称作为枚举值的名称,我在其他程序已经用了中文枚举名称了,暂时没有遇到问题)
?
回到顶部
登录方式的枚举类,page代表传统登录页面,json表示ajax的登录
?
回到顶部
建立annotation类,用于标注到需要权限验证的地方
?
回到顶部
在user用户类中添加文本字段表示权限,字段长度为250字符(因为mysql默认255个字符,可以代表250个权限应该够用了),字符内容是0或者1.1表示有权限,0表示无权限.提示:对于用户的权限配置,只要将对应的权限位设置为0或者1即可.
?
回到顶部
权限判断方法,权限判断的实现算法,用于判断是否有权限
?
回到顶部
建立interceptor类,用于过滤需要控制权限的方法.
?
回到顶部
在spring-mvc中配置interceptor,实现过滤.
?
回到顶部
在需要控制访问的spring-mvc方法上面加上对应的标注.
//方式一
?
//方式二
?
//方式三
?
简介
本文介绍一种采用annotation来对spring-mvc进行权限控制的方法.通过枚举类来定义权限项.将annotation标注到需要控制权限的spring-mvc方法上.然后,在spring-mvc中定义全局过滤器,过滤所有spring-mvc方法,查看方法上的权限annotation信息,以此对权限进行控制.
优点
编写比较方便,在需要控制权限的方法上进行annotation的标注即可,ide能够对annotation进行识别支持.查看权限配置比较方便,因为annotation就在方法上,不用去其他地方翻看.实现方式比较简单.
具体实现
1.建立权限枚举类
建立权限枚举类型,用于描述权限的种类,包含了权限的名称.每个枚举值中包含了权限中文名称和权限索引值(即权限位).(思考:是否可以直接用中文名称作为枚举值的名称,我在其他程序已经用了中文枚举名称了,暂时没有遇到问题)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public enum AuthorityType{ // 包含了枚举的中文名称,枚举的索引值 WORKER( "增删改查员工" , 1 ), SALES_ORDER_CREATE( "创建订单" , 6 ), SALES_ORDER_FIND( "查看订单" , 7 ), SALES_ORDER_MODIFY( "修改订单" , 8 ), SALES_ORDER_DELETE( "删除订单" , 9 ), ; private String name; private int index; private AuthorityType(String int index) { this .name =name; this .index =index; } public String getName(){ return name; } public void setName(String name){ this .name =name; } public int getIndex() { return index; } public void setIndex( int index) { this .index =index; } } |
2.登录方式的枚举类
登录方式的枚举类,page代表传统登录页面,json表示ajax的登录1 2 3 4 5 6 | public enum ResultTypeEnum { //整页刷新 page, //json数据 json } |
3.建立表示权限annotation类
建立annotation类,用于标注到需要权限验证的地方1 2 3 4 5 6 7 8 9 10 11 12 13 | import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target (ElementType.METHOD) @Retention (RetentionPolicy.RUNTIME) @Documented public @interface FireAuthority { AuthorityType[] authorityTypes(); ResultTypeEnum resultType() default ResultTypeEnum.page; } |
4.在user类中加入权限字段
在user用户类中添加文本字段表示权限,字段长度为250字符(因为mysql默认255个字符,可以代表250个权限应该够用了),字符内容是0或者1.1表示有权限,0表示无权限.提示:对于用户的权限配置,只要将对应的权限位设置为0或者1即可.1 2 3 4 5 6 | create table user ( id integer not null auto_increment, name varchar (255), right_content varchar (255), primary key (id) ) type=InnoDB |
5.权限验证算法
权限判断方法,权限判断的实现算法,用于判断是否有权限1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class AuthorityHelper { /** * 判断是否有权限 * * * @return */ public static boolean hasAuthority( int akey,String aString){ return ConstanHelper.getAuthorityVaule(akey,rc); if (aString== null || "" .equals(aString)){ return false ; } char value if (value '1' ){ return true ; } return false ; } } |
6.建立控制权限的interceptor类
建立interceptor类,用于过滤需要控制权限的方法.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URLEncoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class AuthorityAnnotationInterceptor extends HandlerInterceptorAdapter { final Logger @Override public boolean preHandle(HttpServletRequest throws Exception { logger.debug( "" ); HandlerMethod FireAuthority class ); if ( null == fireAuthority){ //没有声明权限,放行 return true ; } logger.debug( "fireAuthority" , fireAuthority.toString()); HttpSession Worker boolean aflag false ; for (AuthorityType at:fireAuthority.authorityTypes()){ if (AuthorityHelper.hasAuthority(at.getIndex(), manager.getRightContent())== true ){ aflag true ; break ; } } if ( false == aflag){ if (fireAuthority.resultType() //传统的登录页面 StringBuilder new StringBuilder(); sb.append(request.getContextPath()); sb.append( "/oprst.jsp?oprst=false&opmsg=" ).append(URLEncoder.encode(ControllerProperty.NOT_HAVE_AUTHORITY, "utf-8" )); response.sendRedirect(sb.toString()); } else if (fireAuthority.resultType() //ajax类型的登录提示 response.setCharacterEncoding( "utf-8" ); response.setContentType( "text/html;charset=UTF-8" ); OutputStream PrintWriter new PrintWriter( new OutputStreamWriter(out, "utf-8" )); pw.println( "{\"result\":false,\"code\":12,\"errorMessage\":\"" +ControllerProperty.NOT_HAVE_AUTHORITY+ "\"}" ); pw.flush(); pw.close(); } return false ; } return true ; } } |
7.配置interceptor类
在spring-mvc中配置interceptor,实现过滤.1 2 3 | < mvc:interceptors > < bean class = "interceptor.AuthorityAnnotationInterceptor" ></ bean > </ mvc:interceptors > |
8.标注需要控制权限的方法
在需要控制访问的spring-mvc方法上面加上对应的标注.//方式一
1 2 3 4 5 | @FireAuthority (AuthorityType. SALES_ORDER_CREATE) @RequestMapping (value= "/save.spr" , method=RequestMethod.POST) public ModelAndView throws Exception { //some code } |
1 2 3 4 5 | @FireAuthority (authorityTypes @RequestMapping (value= "/save.spr" , method=RequestMethod.POST) public ModelAndView throws Exception { //some code } |
1 2 3 4 5 | @FireAuthority (authorityTypes @RequestMapping (value= "/save.spr" , method=RequestMethod.POST) public ModelAndView throws Exception { //some code } |
9.完成了
相关文章推荐
- 一种基于注解的Spring MVC权限控制方法
- 基于注解的Spring MVC权限控制方法
- 在struts2.3.4.1中使用注解、反射、拦截器实现基于方法的权限控制
- 一种基于annotation的Spring-mvc权限控制方法
- 一种基于annotation的Spring-mvc权限控制方法
- 反射和注解的妙用——struts2基于方法的权限控制
- 一种基于delphi巧妙权限控制方案及其实现方法
- 反射和注解的妙用——struts2基于方法的权限控制
- struts2 使用注解、反射、拦截器实现基于方法的权限控制
- 一种基于annotation的Spring-mvc权限控制方法
- 一种基于annotation的Spring-mvc权限控制方法
- 基于注解和拦截器的权限控制
- ASP.NET MVC 中实现基于角色的权限控制的处理方法
- B/S系统权限控制的一种简单方法
- Spring Security(17)——基于方法的权限控制
- 实现数据权限控制的一种方法
- ——基于方法的权限控制
- 基于struts2拦截器的权限控制系统1——后台方法的拦截
- B/S系统权限控制的一种简单方法(转)
- 【web开发】基于注解spring的多方法请求的一种controller实现