`
y806839048
  • 浏览: 1123287 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

shiro安全框架用户传递更多信息的方法(用实体)

阅读更多

shiro安全框架用户传递更多信息的方法(用实体)

 

只要在认证的方法中传入bo那么以后从安全框架拿的就是bo,传的是string,安全框架拿的就是string

 

/*

 * Licensed to the Apache Software Foundation (ASF) under one

 * or more contributor license agreements.  See the NOTICE file

 * distributed with this work for additional information

 * regarding copyright ownership.  The ASF licenses this file

 * to you under the Apache License, Version 2.0 (the

 * "License"); you may not use this file except in compliance

 * with the License.  You may obtain a copy of the License at

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing,

 * software distributed under the License is distributed on an

 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

 * KIND, either express or implied.  See the License for the

 * specific language governing permissions and limitations

 * under the License.

 */

package com.common.shrio;

 

import java.io.Serializable;

import java.util.ArrayList;

import java.util.List;

 

import org.acegisecurity.userdetails.UserDetails;

import org.acegisecurity.userdetails.UserDetailsService;

import org.acegisecurity.userdetails.UsernameNotFoundException;

import org.apache.commons.lang.StringUtils;

import org.apache.shiro.SecurityUtils;

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.authz.SimpleAuthorizationInfo;

import org.apache.shiro.realm.AuthorizingRealm;

import org.apache.shiro.session.Session;

import org.apache.shiro.subject.PrincipalCollection;

import org.apache.shiro.subject.Subject;

import org.apache.shiro.util.ByteSource;

import org.springframework.beans.factory.annotation.Autowired;

 

 

/**

   http://shiro.apache.org/java-authentication-guide.html

 * 

 * Subject Security specific user 'view' of an application user. It can be a human being, a third-party process, 

 * a server connecting to you application application, or even a cron job. Basically, it is anything or 

 * anyone communicating with your application.

 * 

 * PrincipalsA subjects identifying attributes. First name, last name, social security number, username

 * 

 * Credentialssecret data that are used to verify identities. Passwords, Biometric data, x509 certificates,

 * 

 * RealmsSecurity specific DAO, data access object, software component that talkts to a backend data source. 

 * If you have usernames and password in LDAP, then you would have an LDAP Realm that would communicate 

 * with LDAP. The idea is that you would use a realm per back-end data source and Shiro would know how 

 * to coordinate with these realms together to do what you have to do.

 * 

 * @author fq1798

 *

 */

public class ShiroDbRealm extends AuthorizingRealm {

@Autowired

private UserDetailsService userDetailsService;

 

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

System.out.println(" 由于加入了缓�?, 此处只会load�?次:doGetAuthorizationInfo.................");

 

//得到 doGetAuthenticationInfo 方法中传入的凭证,下面认证的时候传的就是实体

UserDetails shiroUser = (UserDetails) principals.fromRealm(getName()).iterator().next();

 

List<String> roleList = new ArrayList<String>();

List<String> permissionList = new ArrayList<String>();

String userName = shiroUser.getUsername();

 

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

 

//这个确定页面�?<shiro:hasRole>标签的name的�??

roleList.add("admin");

info.addRoles(roleList);

//这个就是页面�? <shiro:hasPermission> 标签的name的�??

permissionList.add("/flex/rbac/getSkillMenuAndSkillsForShow.action");

permissionList.add("/flex/uifrm/index.jsp");

info.addStringPermissions(permissionList);

return info;

}

 

 

/**

* AuthenticationInfo represents a Subject's (aka user's) stored account information 

* relevant to the authentication/log-in process only. 

*/

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

 

 

                // 获取基于用户名和密码的令牌

UsernamePasswordToken token1 = (UsernamePasswordToken) token;

UserDetails userDetails;

 

                try {

                    userDetails = this.userDetailsService.loadUserByUsername(token1.getUsername());

                } catch (UsernameNotFoundException notFound) {

 

                    return null;

                }

 

try {

//这里构造函数传的是UserDetails,所以Subject currentUser = SecurityUtils.getSubject();

                                //UserDetailsBean shiroUser = (UserDetailsBean) currentUser.getPrincipal()拿到的是实体,如果传的是string就是string

 

AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(

userDetails, userDetails.getPassword(),

getName());

this.setSession("currentUser", userDetails);

return authcInfo;

} catch (Exception e) {

e.printStackTrace();

}

return null;// null时会在LoginController中抛出UnknownAccountException异常

}

 

private void setSession(Object key, Object value) {

Subject currentUser = SecurityUtils.getSubject();

if (null != currentUser) {

Session session = currentUser.getSession();

if (null != session) {

session.setAttribute(key, value);

}

}

 

/**

* 自定义Authentication对象,使得Subject除了携带用户的登录名外还可以携带更多信息.

*/

public static class ShiroUser implements Serializable {

private static final long serialVersionUID = -1373760761780840081L;

public String loginName;

public String name;

 

public ShiroUser(String loginName, String name) {

this.loginName = loginName;

this.name = name;

}

 

public String getName() {

return name;

}

 

/**

* 本函数输出将作为默认�?<shiro:principal/>输出.

*/

@Override

public String toString() {

return loginName;

}

 

 

}

 

 

}

 

分享到:
评论

相关推荐

    Shiro 安全资料

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。...通过学习和使用Shiro,我们可以更有效地保护我们的应用程序,确保用户数据的安全。

    基于SSM框架的Web应用安全机制研究.docx

    ### 基于SSM框架的Web应用安全机制研究 #### 摘要与背景 随着互联网技术的迅速发展,Web应用已经成为企业信息化系统的重要组成...未来的研究可以进一步探索更多高级的安全机制和技术,以应对不断变化的网络安全挑战。

    springMVC+hibernate+spring+shiro整合例子

    此外,Spring还集成了数据访问、事务管理、安全性、消息传递等多个领域,使得开发者可以方便地将各种组件整合到应用中。 **Shiro** Apache Shiro是一个轻量级的安全框架,主要用于身份认证、授权(权限控制)和会话...

    springShiro.zip

    6. **粗粒度权限控制**:Shiro支持基于URL的权限控制,我们可以在Controller方法上使用`@RequiresPermissions`注解,指定该方法需要的权限。这样,当用户试图访问受保护的URL时,Shiro会进行检查并决定是否允许访问...

    struts框架图书信息管理系统

    8. **权限控制**:系统中需要实现用户角色的区分,这通常可以通过Spring Security或者Apache Shiro等安全框架实现,以确保不同用户只能访问他们被授权的功能。 9. **异常处理**:良好的异常处理机制可以确保系统在...

    用java的 S1SH框架写成的 :BBS

    【标题】:“用Java的SSH框架写成的:BBS” 【内容详解】 SSH框架,全称为Spring、Struts和Hibernate,是Java开发中的一个经典组合,常用于构建企业级Web应用程序,包括像BBS这样的论坛系统。这个框架集合了Spring...

    列车票务信息管理系统.zip

    此外,安全性是此类系统的重要考虑因素,项目中可能采用了如HTTPS协议来保障数据传输的安全,以及Spring Security或Shiro等安全框架来实现用户权限控制,防止未授权访问。 总之,《列车票务信息管理系统》是一个...

    基于java SSM 框架的酒店管理系统.zip

    6. **安全控制**:系统可能使用Spring Security或Apache Shiro进行权限控制,确保只有授权用户才能访问特定资源,例如管理员可以查看所有订单,而普通用户只能查看自己的订单。 7. **异常处理**:在Java SSM项目中...

    毕业设计ssm...一套ssm框架的运动商城.zip

    9. **安全性**:可能会涉及到Spring Security或Shiro等安全框架的使用,实现用户的登录验证和权限控制。 10. **测试**:了解如何编写单元测试和集成测试,确保每个组件的功能正确。 通过这个项目,开发者可以深入...

    ssh三大框架集成步骤

    以上就是SSH集成的基本步骤,实际开发中可能还会涉及到更多细节和优化,但这个流程提供了一个基本的框架集成指南。在学习和实践中,不断深入理解SSH框架各自的原理和协同工作方式,将有助于提升开发效率和代码质量。

    JavaEE物流管理系统

    而管理员则有更多权限,如添加、修改、删除订单,管理用户信息,监控系统运行状态等。这些功能的实现,离不开数据库的设计和优化。系统可能包含如用户表、订单表、货物表、运输状态表等多个实体表,通过合理的关系...

    基于javaMVC的管理员管理系统

    综上所述,基于Java MVC的管理员管理系统是一个涉及多方面技术的项目,包括Spring MVC框架的应用、数据库交互、用户认证和授权、异常处理等。学习和理解这些知识点,对于提升Java Web开发能力至关重要。通过实际项目...

    J2EE框架_笔记_事例_程序

    8. **安全框架整合**:例如Spring Security或Apache Shiro,提供身份验证、授权和会话管理。 这些项目为学习者提供了实战经验,有助于深入理解J2EE框架的各个组成部分及其实际应用场景。通过研究这些项目,开发者...

    任务管理系统(不全)

    在IT行业中,任务管理系统是企业或团队日常工作中不可或缺的一部分,它能有效提高工作效率,确保...如果需要进一步扩展,可以考虑添加更多特性,如任务分类、优先级设定、任务评论、搜索功能等,使系统更加全面和实用。

    JAVAWEB网上银行系统,MVC模式.rar.rar

    这可以通过实现Spring Security或Apache Shiro等安全框架来完成,确保只有授权用户才能访问特定的资源。 8. **测试与部署**: 开发过程中,单元测试、集成测试以及压力测试是必不可少的,可以使用JUnit、Mockito等...

    基于ssm开封名胜古迹旅游网站.zip

    7. **数据库设计**:对于一个旅游网站,数据库可能包括景点信息表、用户信息表、订单表、评论表等多个表,每张表都对应着模型层的一个实体类。设计合理的数据库结构,可以有效存储和管理大量的旅游信息。 8. **安全...

    基于SpringBoot的前后端分离权限管理系统-源码

    JWT是一种轻量级的身份验证机制,可以在客户端和服务端之间传递安全信息,无需在每次请求时携带Session ID,减轻了服务器负担,提高了系统的可伸缩性。 五、数据库设计与ORM框架 在权限管理中,通常涉及用户、角色...

    基于Java和Mysql的图书管理系统.7z_java毕业设计_管理_图书管理系统_

    使用Spring Security或Apache Shiro等安全框架进行权限控制。 7. **测试与优化**:单元测试确保每个功能模块的正确性,性能测试找出系统瓶颈并进行优化。如调整数据库索引、缓存策略等。 综上所述,基于Java和...

    java论坛代码

    在安全方面,Java论坛会使用Spring Security或Apache Shiro来实现用户认证和授权。这包括注册验证、密码加密存储、登录验证以及权限控制,确保只有合法用户能访问特定资源。 在并发处理上,Java论坛可能利用多线程...

    SSM逍遥长租公寓管理房源发布平台可升级SpringBoot源码案例设计.zip

    Spring Security或Apache Shiro等框架可以用于实现用户认证和授权,保护系统资源不被非法访问。 7. **前端技术**:项目可能使用HTML、CSS和JavaScript构建用户界面,Bootstrap、Vue.js或React.js等前端框架可以提高...

Global site tag (gtag.js) - Google Analytics