权限控制

1. 页面标签:<security:authorize/> 可以嵌套
2. 注解方式, 只能用其中一种:
* JSR250
引入依赖
开启jsr250注解 security
@RoleAllowed
* Secured注解, security自带的
开启Secured注解注解 security
@Secured
* Spring的注解
开启Spring注解 security
@PreAuthorize


一、
1、这里需要先开启SpELl表达式,否则不能使用SpringSecurity页面对应的标签

2、

<security:http auto-config="true" use-expressions="true">
<!-- 配置拦截的请求地址,任何请求地址都必须有ROLE_USER的权限 -->
<security:intercept-url pattern="/index.jsp" access="ROLE_USER" />
<security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" />

//略....
</security:http>

 

3、

<security:authorize access="hasAnyRole('ROLE_ADMIN','ROLE_USER')">
<li class="treeview"><a href="#"> <i class="fa fa-cogs"></i>
<span>系统管理</span> <span class="pull-right-container"> <i
class="fa fa-angle-left pull-right"></i>
</span>


</a>
<ul class="treeview-menu">

<li id="system-setting"><a
href="${pageContext.request.contextPath}/user/list"> <i
class="fa fa-circle-o"></i> 用户管理
</a></li>
此标签表示下面的内容只有管理员权限才可以访问

<security:authorize access="hasAnyRole('ROLE_ADMIN')">
<li id="system-setting"><a
href="${pageContext.request.contextPath}/role/list"> <i
class="fa fa-circle-o"></i> 角色管理
</a></li>
<li id="system-setting"><a
href="${pageContext.request.contextPath}/permission/list">
<i class="fa fa-circle-o"></i> 权限管理
</a></li>
<li id="system-setting"><a
href="${pageContext.request.contextPath}/pages/syslog-list.jsp"> <i
class="fa fa-circle-o"></i> 访问日志
</a></li>
</security:authorize>
</ul></li>
</security:authorize>

4、通过上面的控制,我们发现一个问题,用户只是页面看不到菜单按钮,但仍然能访问原来地址,我们需要做后台权限控制。这里提供了多种注解方式实现,我们着重讲讲其中3种注解实现方式。
但无论哪种方式,都需要首先开启AOP支持,并且不能多种注解同时使用。修改SpringMVC配置文件如下:

<!--开启AOP-->
<aop:aspectj-autoproxy proxy-target-class="true" />

 

@RolesAllowed

 

JSR 250作为一个Java规范请求,它的目标是定义一组注解,这些注释解决常见的语义概念,因此可以被许多JavaEE和JavaSE组件使用。这是为了避免这些组件之间的冗余注释。随着声明式注释驱动的配置越来越多地应用于Java框架和应用程序中,例如:spring通过注释使其框架的更多组件可配置,JSR 250的重要性在将来可能会增加。

 

使用该注解需要首先引入依赖:

<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>

在spring-security.xml配置文件中开启JSR-250的注解支持

<security:global-method-security jsr250-annotations="enabled"/>

 

@RolesAllowed("ROLE_ADMIN")
public class RoleController {}

 

security注解方式权限拦截:@Secured

 

在spring-security.xml配置文件中开启注解支持

<security:global-method-security secured-annotations="enabled"/>

在Controller类或者方法添加注解

@Secured("ROLE_ADMIN")

 

Spring表达式的方式

在spring-security.xml配置文件中开启注解支持

<security:global-method-security pre-post-annotations="enabled"/>

在Controller类或者方法添加注解

@PreAuthorize("hasAuthority('ROLE_ADMIN')")

 

页面403处理

在用户没有权限访问时,经常会出现403页面,不是很友好。SpringSecurity对这个也有控制,只需要在spring-security.xml中加上如下配置即可。

 

<security:access-denied-handler error-page="/403.jsp"/>

 

 

 




posted @ 2019-03-26 23:28  樱花落颜  阅读(144)  评论(0编辑  收藏  举报