大数据学习之权限系统应该如何设计

说到权限系统是每一个后台管理系统,很重要也是必不可少的一块功能,今天就给大家准备了如何设计好一个权限管理系统,该系统是基于SSH(Spring+Spring MVC+Hibernate)整合之后的基本上进行实现。

我采用的是市场比较流行的Apache shiro,以下是对该框架的简介。

Apache Shiro 是一个框架,可用于身份验证和授权。

身份验证和授权

在对系统进行安全保障时,有两个安全性元素非常重要:身份验证和授权。虽然这两个术语代表的是不同的含义,但出于它们在应用程序安全性方面各自的角色考虑,它们有时会被交换使用。

Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权。使用 Shiro,您就能够为您的应用程序提供安全性而又无需从头编写所有代码。

--------------------------------------------------------------------------------

还有spring security框架

问题:

权限控制应该控制哪些地方?(菜单级别)

不同的人看到的是不同的菜单

防止有人恶意通过猜测URL地址进入(过滤器判断)

学东西我们应该一步一步的来,首面我们需要在已有框架上加入shiro,配置方式如下:

1、导入相关的包

org.apache.shiro

shiro-spring

1.3.2

2、web.xml加入Shiro的支持


shiroFilter

org.springframework.web.filter.DelegatingFilterProxy


targetFilterLifecycle

true

shiroFilter

/*

3、Spring整合Shiro

创建application-shiro.xml文件,并引入到spring的配置文件中





/fulllogin/**=anon

/randCodeImage=anon

/favicon.ico = anon

/admin_files/** = anon

/** = authc


4、创建自定义

public class ShiroDbRealm extends AuthorizingRealm {

public static final String SESSION_USER_KEY = "keduoxSession";

/**

* 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用,负责在应用程序中决定用户的访问控制的方法

*/

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

User user = (User) SecurityUtils.getSubject().getSession().getAttribute(ShiroDbRealm.SESSION_USER_KEY);

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

if("admin".equals(user.getName())){

info.addRole("admin");

}

return info;

}

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

//得到输入的用户名和密码

UsernamePasswordToken upt=(UsernamePasswordToken)token;

System.out.println(String.valueOf(upt.getPassword()));

String username=upt.getUsername();

System.out.println("输入的用户名为:"+username);

//从数据库中查询用户名

User user=new User();

user.setName("admin");

user.setPassword("123456");

if(!user.getName().equals(username)){

return null;

}

//将数据库的值存入到session中

Session session=SecurityUtils.getSubject().getSession();

//将值给session设置值

session.setAttribute(SESSION_USER_KEY, user);

Object principal = token.getPrincipal();

System.out.println(principal+"-----------");

return new SimpleAuthenticationInfo(principal, user.getPassword(), this.getName());

}

}

4、修改登录方法

UsernamePasswordToken token = new UsernamePasswordToken(user.getName(), user.getPassword().toCharArray(), null);

try {

SecurityUtils.getSubject().login(token);

} catch (AuthenticationException e) {

System.out.println("登录有异常信息");

e.printStackTrace();

}

return "success.jsp";

5、页面中使用注解权限配置

<%@ taglib uri="http://shiro.apache.org/tags" prefix="shiro" %>

success

登录之后

不在登录状态时

用户在没有RememberMe时

用户在RememberMe时

在有abc或者123角色时

拥有角色abc

没有角色abc

拥有权限资源abc

没有abc权限资源

显示用户身份名称

显示用户身份中的属性值

通过上面的方式,跑通以后,加入注解的方式进行拦截:

1、spring-servlet中使用以下配置


2、方法上面配置以下注解

@RequiresRoles("admin2")

注解说明:

@ RequiresAuthentication

可以用户类/属性/方法,用于表明当前用户需是经过认证的用户。

@ RequiresGuest

表明该用户需为”guest”用户

@ RequiresPermissions

当前用户需拥有制定权限

@RequiresRoles

当前用户需拥有制定角色

--------------------------------------------------------------------------------

统一处理异常

SPRING MVC

/403

以上有不懂的或者需要源码,我们可以互相讨论:加我QQ123880681

@来自科多大数据

你可能感兴趣的:(大数据学习之权限系统应该如何设计)