JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

内容预览:
  • 1 学习计划 1、演示权限demo 2、权限概述 n 认证 n 授权 3、常见的...~
  • 1 学习计划1、演示权限demo2、权限概述n 认证n 授权3、常见的权限...~
  • 1 学习计划1、演示权限demo2、权限概述n 认证n 授权3、常见的权限...~

1 学习计划

1、演示权限demo

2、权限概述

n 认证

n 授权

3、常见的权限控制方式

n url拦截权限控制

n 方法注解权限控制

4、创建权限数据模型

n 权限表

n 角色表

n 用户表

n 角色权限关系表

n 用户角色关系表

5apache shiro框架简介

n 官网和下载

n 框架核心功能

n 框架调用流程

6、基于shiro框架进行认证操作

 

 

演示权限demo

 

如何运行项目:

第一步:在eclipse中引入上面的项目

 

第二步:创建一个数据库privilegedemo,并执行项目中的sql脚本

 

 

 

第三步:启动项目,可以完成自动建表,为itcast_user表插入一条初始化数据

 

 

权限概述

认证:系统提供的用于识别用户身份的功能,通常登录功能就是认证功能—–让系统知道你是谁??

授权:系统授予用户可以访问哪些功能的许可(证书)—-让系统知道你能做什么??

 

常见的权限控制方式

4.1 URL拦截权限控制

底层基于拦截器或者过滤器实现

 

4.2 方法注解权限控制

底层基于代理技术实现,为Action创建代理对象,由代理对象进行权限校验

 

 

创建权限数据模型

l 权限表

l 角色表

l 用户表

l 角色权限关系表

l 用户角色关系表

 

角色就是权限的集合,引入角色表,是为了方便授权

 

 

 

apache shiro框架简介

官网:shiro.apache.org

 

 

l 下载文件:

 

 

l shiro框架的核心功能:

认证

授权

会话管理

加密

 

l shiro框架认证流程

 

 

Application Code:应用程序代码,由开发人员负责开发的

Subject:框架提供的接口,代表当前用户对象

SecurityManager:框架提供的接口,代表安全管理器对象

Realm:可以开发人员编写,框架也提供一些,类似于DAO,用于访问权限数据

 

 

BOS项目中应用shiro框架进行认证

第一步:引入shiro框架相关的jar

        <!-- 引入shiro框架的依赖 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.2.2</version>
</dependency>

 

第二步:在web.xml中配置spring框架提供的用于整合shiro框架的过滤器记得放在struct过滤器的上方

    <!-- 配置shiro框架过滤器 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

 

启动tomcat服务器,抛出异常:spring工厂中不存在一个名称为“shiroFilter”的bean对象

 

 

第三步:在spring配置文件中配置beanidshiroFilter

    <!-- 配置shiro过滤器工厂bean -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login.jsp"/>
<property name="successUrl" value="/index.jsp"/>
<property name="unauthorizedUrl" value="/unauthorized.jsp"/>
<property name="filterChainDefinitions">
<value>
/css/** = anon
/js/** = anon
/images/** = anon
/login.jsp* = anon
/validatecode.jsp* = anon
/userAction_login.action = anon
/page_base_staff.action = perms["staff"]
/* = authc
</value>
</property>
</bean>

 

/**的意思是所有文件夹及里面的子文件夹
/*是所有文件夹,不含子文件夹
/是web项目的根目录

一级和多级的区别

 

 

 

框架提供的过滤器:anon代表可以匿名访问….

 

第四步:配置安全管理器

    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
</bean>

 

第五步:修改UserAction中的login方法,使用shiro提供的方式进行认证操作

 

public String login() {

String key
= (String) ServletActionContext.getRequest().getSession().getAttribute("key");
if (StringUtils.isNotBlank(key) && checkcode.equals(key)) {
// 验证码正确
Subject subject = SecurityUtils.getSubject();
//用户密码令牌
AuthenticationToken token = new UsernamePasswordToken(model.getUsername(),MD5Utils.md5(model.getPassword()));

try{
subject.login(token);

User u
= (User) subject.getPrincipal();

ServletActionContext.getRequest().getSession().setAttribute(
"User", u);


}
catch(Exception e){
e.printStackTrace();
return LOGIN;
}

return "home";
}
else {
// 验证码错误
this.addActionError("输入的验证码错误!");
return LOGIN;
}

}

 

第六步:自定义realm,并注入给安全管理器

public class BOSRealm extends AuthorizingRealm{
@Autowired
private IUserDao userDao;

//认证方法
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
System.out.println(
"realm中的认证方法执行了。。。。");
UsernamePasswordToken mytoken
= (UsernamePasswordToken)token;
String username
= mytoken.getUsername();
//根据用户名查询数据库中的密码
User user = userDao.findUserByUserName(username);
if(user == null){
//用户名不存在
return null;
}
//如果能查询到,再由框架比对数据库中查询到的密码和页面提交的密码是否一致
AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName());
return info;
}

//授权方法
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// TODO Auto-generated method stub
return null;
}

 

最后修改一下spring配置文件里面的securityManger,注入Realm:

    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="bosRealm"/>
</bean>


<bean id="bosRealm" class="com.xyp.bos.realm.BOSRealm"/>

 

以上就是:JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论