shiro(认证功能)使用记录

原创 2018年04月17日 12:09:47

官网:shiro.apache.org 点击打开链接

pom.xml配置:
    		<!-- 引入shiro框架的依赖 -->
		<dependency>
			<groupId>org.apache.shiro</groupId>
			<artifactId>shiro-all</artifactId>
			<version>1.2.2</version>
		</dependency>
web.xml配置:
	<!-- 配置整合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>
applicationContext.xml配置:
	<!-- 配置shiro框架 -->
	<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean" >
		<!-- 注入安全管理器 -->
		<property name="securityManager" ref="securityManager" />
		<!-- 
			URL配置
				loginUrl:未登录状态跳转的页面
				successUrl:登录状态跳转的页面
				unauthorizedUrl:权限不足时跳转的页面
		 -->
		<property name="loginUrl" value="/login.jsp" />
		<property name="successUrl" value="/index.jsp" />
		<property name="unauthorizedUrl" value="/unauthorized.jsp" />
		<!-- 配置URL拦截 -->
		<property name="filterChainDefinitions">
			<value>
				/css/** = anon
				/js/** = anon
				/images/** = anon
				/login.jsp* = anon
				/UserAction_login* = anon
				/validatecode.jsp = anon
				
				/* = authc
			</value>
		</property>
	</bean>
	<!-- 配置安全管理器 -->
	<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
		<property name="realm" ref="bosRealm"></property>
	</bean>
	<!-- 配置Realm -->
	<bean id="bosRealm" class="com.xushuai.bos.realm.BOSRealm"></bean>

Shiro框架提供的过滤器:


实例代码(UserAction):
	/**
	 * 登录(Shiro认证)
	 * @return
	 */
	public String login(){
		//从session中获取生成的验证码
		String vcode = (String) ActionContext.getContext().getSession().get("key");
		//校验验证码
		if(StringUtils.isNotBlank(checkcode) && vcode.equals(checkcode)){//验证码正确
			Subject subject = SecurityUtils.getSubject();
			AuthenticationToken token = new UsernamePasswordToken(model.getUsername(), MD5Utils.md5(model.getPassword()));
			try {
				subject.login(token);
				User user = (User) subject.getPrincipal();
				ActionContext.getContext().getSession().put("user", user);
			} catch (UnknownAccountException e1) {
				e1.printStackTrace();
				this.addActionError("用户名不存在!");
				return LOGIN;
			} catch (IncorrectCredentialsException e2) {
				e2.printStackTrace();
				this.addActionError("密码错误!");
				return LOGIN;
			}
			return HOME;
		}else{//验证码错误
			this.addActionError("验证码错误");
			return LOGIN;
		}
	}
BOSRealm(自定义Realm对象):
package com.xushuai.bos.realm;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import com.xushuai.bos.dao.UserDao;
import com.xushuai.bos.entity.User;

public class BOSRealm extends AuthorizingRealm {
	
	@Autowired
	@Qualifier("userDao")
	private UserDao userDao;
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	@Override
	//认证
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
		UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken)authenticationToken;
		String username = usernamePasswordToken.getUsername();
		//根据用户名查询用户
		User user = userDao.findByUsername(username);
		//校验user是否存在
		if(user == null){//用户名不存在
			return null;
		}
		/*
		 * 密码校验shiro框架会自动完成,我们只需要创建一个AuthenticationInfo对象
		 * 并将其返回
		 */
		AuthenticationInfo info = new SimpleAuthenticationInfo(user, user.getPassword(), this.getName());
		
		return info;
	}

	@Override
	//授权
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
		// TODO Auto-generated method stub
		return null;
	}


}


shiro学习和使用实例(2)——登陆认证和授权

shiro是一个功能强大且容易使用的java安全框架,用它可以完成认证,授权,加密,会话管理,同时它也支持web集成,多线程,缓存等。...
  • siqilou
  • siqilou
  • 2015-02-28 17:01:53
  • 3700

Shiro源码分析----认证流程

由于本文是基于源码分析Shiro认证流程,所以假设阅读者对Shiro已经有一定的了解,如果对Shiro还不大了解的话,推荐一下博文:跟我学Shiro目录贴 Apache Shiro作为一个优秀的权...
  • xtayfjpk
  • xtayfjpk
  • 2016-12-18 19:25:12
  • 3448

Shiro之多Realm的认证及认证策略-yellowcong

多重认证是操作的是多个Realm。第一种方式是,在ModularRealmAuthenticator里面可以配置多个Reamls,默认的验证策略是,至少一个满足即可(AtLeastOneSuccess...
  • yelllowcong
  • yelllowcong
  • 2017-12-17 21:19:36
  • 411

shiro 权限认证以及授权demo

  • 2016年09月10日 17:14
  • 1.21MB
  • 下载

shiro认证授权流程

shiro框架的出现使得认证和授权变的简单,那shiro是如歌进行认证和授权的呢,下面来看看其流程: 认证流程: 认证流程: 1、通过ini配置文件创建securityManager...
  • u010927139
  • u010927139
  • 2016-06-30 11:41:32
  • 900

【Shiro】Apache Shiro架构之权限认证(Authorization)

上一篇博文总结了一下Shiro中的身份认证,本文主要来总结一下Shiro中的权限认证(Authorization)功能,即授权。如下: 本文参考自Apache Shiro的官方文档:http:/...
  • eson_15
  • eson_15
  • 2016-07-03 17:07:07
  • 12969

Shiro身份认证的流程

Shiro身份认证流程如下:请看Shiro架构图 登录的时候-------->给Security Manager进行管理----------------->Authenticator...
  • qq383264679
  • qq383264679
  • 2015-06-13 15:32:32
  • 1289

【Shiro权限管理】12.Shiro认证策略

注:该系列所有测试均在之前创建的Shiro3的Web工程的基础上。 上一篇我们讲到了Shiro的多Realm验证,并且编写实例进行了测试。对于多Realm校验,我们还需要知道,两个Realm时,怎么才...
  • u013517797
  • u013517797
  • 2017-11-26 13:38:39
  • 503

Shiro ---身份认证、授权

Subject  认证主体 1.身份认证流程: 2.Realm&JDBC Reaml Subject 认证主体包含两个信息: Principals:身份,可以是用户名,邮...
  • lifupingcn
  • lifupingcn
  • 2016-10-11 16:47:21
  • 920
收藏助手
不良信息举报
您举报文章:shiro(认证功能)使用记录
举报原因:
原因补充:

(最多只允许输入30个字)