在web项目中使用shiro(认证、授权)

<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<!--保证该过滤器的生命周期和spring 工厂中shiro过滤器对象的生命周期一致-->
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
<!--声明该过滤器代理工厂类中的id为什么的shiro过滤器对象-->
<init-param>
<param-name>targetBeanName</param-name>
<param-value>shiroFilter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/**
* 实现自定义域
* Authorization 授权(权限校验)
*
* Authentication 认证(登录校验)
*
*/
public class AuthRealm extends AuthorizingRealm {
@Autowired
private UserService userService;
//获取授权信息
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
//获取认证信息
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws
AuthenticationException {
//获取用户名 不过一般往shiro中放置用户身份信息的时候,不直接放用户名字符串,放用户对象
String username = token.getPrincipal().toString();
//有了用户名,要根据用户名在数据库中查询用户对象
Users user = userService.findByUsername(username);
//判断如果用户对象不存在,抛出UnknownAccountException
if(user==null){
throw new UnknownAccountException("用户名不存在");
}
//封装用户的身份对象 返回这个身份对象
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),"authRealm");
return info;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--创建自定义域对象-->
<bean id="authRealm" class="com.aaa.ssm.realm.AuthRealm"></bean>
<!--创建shiro的安全管理器对象-->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!--要声明域,在域中读取认证和授权的数据-->
<property name="realm" ref="authRealm"></property>
</bean>
<!--创建shiro的过滤器对象-->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!--要注入安全管理器对象-->
<property name="securityManager" ref="securityManager"></property>
<!--配置登录请求的路径-->
<property name="loginUrl" value="/user/login.do"></property>
<!--配置shiro认证和授权的过滤器-->
<property name="filterChainDefinitions">
<value>
<!--对静态资源不拦截-->
<!--anon指匿名访问的过滤器,所有匿名用户都可以访问static下面的资源-->
/static/*=anon
/user/login.do=anon
/login.jsp=anon
<!--authc指必须经过认证(登录过之后)才能访问的请求 /*代表所有有一个斜杠的请求都要经过认证 -->
/*=authc
/*/*=authc
</value>
</property>
</bean>
</beans>
/**
* 用户登录的请求
* @param user
* @return
*/
@RequestMapping("/login")
public String login(Users user, Model model, HttpSession session){
//获取用户的主体对象
Subject subject = SecurityUtils.getSubject();
//封装用户名和密码的认证信息对象
UsernamePasswordToken upt = new UsernamePasswordToken(user.getUsername(),user.getPassword());
//进行登录认证
try {
subject.login(upt);
}catch (Exception e){
e.printStackTrace();
System.out.println("用户名或者密码错误");
return "redirect:/login.jsp";
}
return "index";
}


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aspectj相关jar包-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>

在web项目中使用shiro(认证、授权)的更多相关文章
- SpringBoot系列: SpringBoot Web项目中使用Shiro 之二
==================================Shiro 的加深理解:==================================1. Shiro 和 Spring 系组 ...
- SpringBoot系列: SpringBoot Web项目中使用Shiro
注意点有:1. 不要启用 spring-boot-devtools, 如果启用 devtools 后, 不管是热启动还是手工重启, devtools总是试图重新恢复之前的session数据, 很有可能 ...
- 在web项目中使用shiro(记住我功能)
第一步,添加“记住我”复选框,rememberMe要设置参数 第二步,配置shiro的主配置文件 注意 rememberMeCookie对应的bean中要声明 <constructor-arg ...
- 细说shiro之四:在web应用中使用shiro
官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <gr ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- 转 web项目中的web.xml元素解析
转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45) 阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...
- 前后端分离Web项目中,RBAC实现的研究
在前后端分离Web项目中,RBAC实现的研究 最近手头公司的网站项目终于渐渐走出混沌,走上正轨,任务也轻松了一些,终于有时间整理和总结一下之前做的东西. 以往的项目一般使用模板引擎(如ejs)渲染 ...
- AngularJS进阶(十七)在AngularJS应用中实现微信认证授权遇到的坑
在AngularJS应用中集成微信认证授权遇到的坑 注:请点击此处进行充电! 前言 项目开发过程中,移动端新近增加了一个功能"微信授权登录",由于自己不是负责移动端开发的,但最后他 ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
随机推荐
- Wpf之HandyControls与MaterialDesign混用之DataGrid
首先在App.Xaml引入相关资源 <Application.Resources> <ResourceDictionary> <ResourceDictionary.Me ...
- 知识点二:HTTP超文本文件传输协议
HTTP超文本传输协议概念: http1.1之前采用非持续链接服务器在建立连接上开销较大,http1.1之后默认采用持续连接,并有超时设置 http协议:超文本文件传输协议,用于传输文本文件,请求的方 ...
- 拍照购物APP之可行性分析
你一定有过这样的生活经历:走在路上发现一个陌生人的穿着非常符合自己的穿衣品味,想要购买一件同样款式的衣服却找不到购买地址,偷偷拍了张照片也只能留作纪念.此时,在手机上安装一款通过图片进行购物搜索的AP ...
- mongodb权限篇
1. 权限详解 内建角色: 数据库用户角色: read.readWrite: 数据库管理角色: dbAdmin.dbOwner.userAdmin: 集群管理角色: clusterAdmin.clus ...
- Servlet 和 Servlet容器
Servlet 很多同学可能跟我一样始终没有搞清楚到底什么是 Servlet,什么是 Servlet 容器.网上看了很多帖子,或许人家说的很清楚,但是自己的那个弯弯就是拐不过来. 想了很久说一下自己的 ...
- 基于spring的安全管理框架-Spring Security
什么是spring security? spring security是基于spring的安全框架.它提供全面的安全性解决方案,同时在Web请求级别和调用级别确认和授权.在Spring Framewo ...
- Springboot:属性常量赋值以及yml配置文件语法(四)
方式一: 注解赋值 构建javaBean:com\springboot\vo\Dog 1:@Component:注册bean到spring容器中 2:添加get set toString方法 3:使用 ...
- seo 回忆录百度基本概念(一)
前言 我以前的博客自己做的seo,现在拿来和大家一起交流,是白帽哈,黑帽的不敢发,也不敢学[微笑]. 正文 为什么做seo 做seo说到底就是为了排名.为什么需要排名呢?因为现在人比较懒,只会去查看第 ...
- tensorflow1.0 变量加法
import tensorflow as tf state = tf.Variable(0,name='counter') print(state.name) one = tf.constant(1) ...
- 蒲公英 · JELLY技术周刊 Vol.03
蒲公英 · JELLY技术周刊 Vol.03 「蒲公英」期刊全新升级--JELLY技术周刊!深度挖掘业界热点动态,来自团队大咖的专业点评,带你深入了解团队研究的技术方向. 登高远眺 天高地迥,觉宇宙之 ...