shiro javaSE初步认识,shirojavaSE认识
shiro javaSE初步认识,shirojavaSE认识
shiro框架理解:
小白一枚哪里理解不对的欢迎大家评论指正,谢谢
参照博客:https://blog.csdn.net/liaomin416100569/article/details/78838900
shiro框架提供了认证(登陆),授权,加密,会话管理功能,更容易方便处理,不同用户,角色的权限问题,不依赖容器,javaSE和web环境都可使用.
-
认证(登陆):识别’用户’身份
-
授权:登陆后,可以控制不同用户访问不同的资源
-
加密:将密码加密,使密码更安全
-
会话管理:提供session会话对象管理
关键词含义:
subject:
'用户’但是并不止止单指用户,也可以是第三方进程、后台帐户等等,它是指与应用有数据交互的东西,本人暂时理解为用户(比较形象),它与线程有关,一个线程一个subect对象,也可以使用以下方法来实现
两个线程中得到同一个对象(关联运行)
- associatewith(Runnable runnable)
- execute(Runnable runnable)
- Callable associateWith(Callable callable)
- v execute(Callable callable) throws ExecutionException
####SecurityManager(核心):
管理所有subject,shiro的操作都是直接或间接经过了
SecurityManager的管理,它类似于springMVC中DispatcherServlet事情交给SecurityManager它将会把事情交给对应的组件.
####Realm:
认证和授权,逻辑代码都是在此类中编写,连接shiro框架与应用安全数据间的“桥梁”(shiro框架通过它来知道判断数据),它就像一个封装好的dao层,当需要知道用户的权限是否可以完成某个行为或认证用户时,找到它调用方法就可以了,它可以有多个,多个Realm用来实现不同的认证/权限需求,但至少需要一个Realm,当使用javaSE时就可以ini文件代替,(ini文件是window系统的配置文件,可以直接用记事本打开)
javaSE shiro认证用户:
###shiro.ini文件:
[users]
##用户名=密码,角色
zhang=123,administrator
wang=123,manager
lisi=lisi,guest
[roles]
##角色=权限(*代表全部权限,一个角色可以有多个权限,一个用户可以有多个角色,都是多对多关系)
administrator=*
manager=user:*
guest=user:query
###测试代码:
public class JavaSEShiroTest {
Logger logger = LoggerFactory.getLogger (JavaSEShiroTest.class);
@Before
public void before() {
//初始化工厂类,给出shiro.ini文件地址
Factory<SecurityManager> factory = new IniSecurityManagerFactory ("classpath:shiro.ini");
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance ();
SecurityUtils.setSecurityManager (securityManager);
}
@Test
public void test() {
//获取subject对象
Subject subject = SecurityUtils.getSubject ();
//isAuthenticated判断是否登陆 登陆未true 否则为false
if (!subject.isAuthenticated ()) {
System.out.println ("还没有登陆");
//模拟用户数据
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken ("zhang", "123");
try {
//登陆
subject.login (usernamePasswordToken);
} catch (UnknownAccountException uae) {
System.out.println("用户名不存在:" + usernamePasswordToken.getPrincipal ());
} catch (IncorrectCredentialsException ice) {
System.out.println ("账户密码 " + usernamePasswordToken.getPrincipal () + " 不正确!");
} catch (LockedAccountException lae) {
System.out.println("用户名 " + usernamePasswordToken.getPrincipal () + " 被锁定 !");
}
if (subject.isAuthenticated ()) {
System.out.println ("登陆成功"+usernamePasswordToken.getPrincipal ());
}
}
}
}
###maven依赖jar包:
<dependencies>
<!-- shiro核心包 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.5</version>
</dependency>
<!-- slf4j日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
运行:
相关文章
- 暂无相关文章
用户点评