- 浏览: 563575 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (145)
- apache-struts (3)
- apache-shiro (4)
- apache-wicket (1)
- spring (34)
- spring-data-jpa (2)
- spring-mvc (20)
- spring-security (1)
- spring-webflow (1)
- hibernate (2)
- mongodb (1)
- ibatis (5)
- mysql (4)
- 开源组件 (18)
- java (3)
- maven (7)
- jBPM (1)
- EJB (1)
- JMS (2)
- servlet / jsp (9)
- javascript / jquery (10)
- 工作技巧 (12)
- ubuntu (6)
- bootstrap (10)
- javaee (1)
- 他山石 (7)
- jetbrick (1)
最新评论
-
yubao2008:
[size=x-small]为什么我也这样试了, 就是没有生效 ...
javax.servlet.http.HttpServletResponse 得到 status_code -
chenrl:
...
SpringMVC杂记(十五) spring-mvc controller 的切面 -
LONGTENGLONG:
你好,这样配置的,得到的集合为空,是什么原因?
apache-shiro杂记(一) 统计在线用户数目 -
xiafengfeiwu:
apache-shiro 学习笔记 -
3108493554:
你好 ,有些问题想请教下,加下我qq310849354,你这上 ...
SpringMVC杂记(十二) 自定义Interceptor从Active Directory得到域信息
(一) 看到SpringSide4居然也用shiro作为安全框架,不是用的spring-security。着实有点惊讶。
apache-shiro的强大可见一斑。
(二) apache-shiro依赖的包
除此之外还有一些东西也不可少spring, spring-mvc, ibatis等
(三) demo采取比较典型的“User-Role-Permission”模型
自己实现一个UserDao, ibatis实现。
这个不是本文要记述的重点,简单贴一下代码。
(三) 用户和权限数据源是自己设计的,应该实现自己的Realm对象。
(四) apache-shiro的配置
web.xml
spring-shiro.xml
spring-mvc.xml
(五) jsp-taglib 支持
[官方文档] http://shiro.apache.org/web.html#Web-taglibrary
(六) 默认过滤器(10个)
anon:例子/admins/**=anon 没有参数,表示可以匿名使用。
authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数
roles:例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。
perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。
port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。
authcBasic:例如/admins/user/**=authcBasic没有参数表示httpBasic认证
ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https
user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查
[官方文档] http://shiro.apache.org/web.html#Web-FilterChainDefinitions
(七) 常用元注释
删除那个用户的Session,让他不得不重新登录不就好了。
或者你看一下org.apache.shiro.session.mgt.eis.SessionDAO接口,他也提供了,updateSession方法,我没这么干过,我不知道这个能不能行。
我看了一下,它是用ehcache做缓存的,但是我getAuthorizationCache这个居然没取到Cache
,不知道怎么回事
删除那个用户的Session,让他不得不重新登录不就好了。
或者你看一下org.apache.shiro.session.mgt.eis.SessionDAO接口,他也提供了,updateSession方法,我没这么干过,我不知道这个能不能行。
已经上传了整个db的dump。
真快啊 感谢感谢 嘻嘻
已经上传了整个db的dump。
apache-shiro的强大可见一斑。
(二) apache-shiro依赖的包
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.1</version> </dependency>
除此之外还有一些东西也不可少spring, spring-mvc, ibatis等
- spring.3.1.2
- spring-mvc.3.1.2
- ibatis.2.3.4
- cglib.2.2
(三) demo采取比较典型的“User-Role-Permission”模型
-- ----------------------------------------------------- -- Table `shiro`.`TBL_PERMISSION` -- ----------------------------------------------------- DROP TABLE IF EXISTS `shiro`.`TBL_PERMISSION` ; CREATE TABLE IF NOT EXISTS `shiro`.`TBL_PERMISSION` ( `PERMISSION_ID` INT NOT NULL AUTO_INCREMENT , `PERMISSION_NAME` VARCHAR(45) NULL , PRIMARY KEY (`PERMISSION_ID`) , UNIQUE INDEX `PERMISSION_NAME_UNIQUE` (`PERMISSION_NAME` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `shiro`.`TBL_ROLE` -- ----------------------------------------------------- DROP TABLE IF EXISTS `shiro`.`TBL_ROLE` ; CREATE TABLE IF NOT EXISTS `shiro`.`TBL_ROLE` ( `ROLE_ID` INT NOT NULL AUTO_INCREMENT , `ROLE_NAME` VARCHAR(45) NULL , PRIMARY KEY (`ROLE_ID`) , UNIQUE INDEX `ROLE_NAME_UNIQUE` (`ROLE_NAME` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `shiro`.`TBL_USER` -- ----------------------------------------------------- DROP TABLE IF EXISTS `shiro`.`TBL_USER` ; CREATE TABLE IF NOT EXISTS `shiro`.`TBL_USER` ( `USER_ID` INT NOT NULL AUTO_INCREMENT , `USER_USERNAME` VARCHAR(45) NOT NULL , `USER_PASSWORD` CHAR(32) NOT NULL , PRIMARY KEY (`USER_ID`) , UNIQUE INDEX `USER_USERNAME_UNIQUE` (`USER_USERNAME` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `shiro`.`TBL_PERMISSION_ROLE` -- ----------------------------------------------------- DROP TABLE IF EXISTS `shiro`.`TBL_PERMISSION_ROLE` ; CREATE TABLE IF NOT EXISTS `shiro`.`TBL_PERMISSION_ROLE` ( `ROLE_ID` INT NOT NULL , `PERMISSION_ID` INT NOT NULL , PRIMARY KEY (`ROLE_ID`, `PERMISSION_ID`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `shiro`.`TBL_ROLE_USER` -- ----------------------------------------------------- DROP TABLE IF EXISTS `shiro`.`TBL_ROLE_USER` ; CREATE TABLE IF NOT EXISTS `shiro`.`TBL_ROLE_USER` ( `ROLE_ID` INT NOT NULL , `USER_ID` INT NOT NULL , PRIMARY KEY (`ROLE_ID`, `USER_ID`) ) ENGINE = InnoDB;
自己实现一个UserDao, ibatis实现。
这个不是本文要记述的重点,简单贴一下代码。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap namespace="user"> <typeAlias alias="User" type="com.ztgame.sd.domain.User"/> <resultMap class="User" id="result-map-01" groupBy="id"> <result property="id" column="USER_ID" /> <result property="username" column="USER_USERNAME" /> <result property="password" column="USER_PASSWORD" /> <result property="roleSet" resultMap="role.result-map-01" /> </resultMap> <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <sql id="select-base-01"> SELECT u.USER_ID, u.USER_USERNAME, u.USER_PASSWORD, r.ROLE_ID, r.ROLE_NAME, p.PERMISSION_ID, p.PERMISSION_NAME FROM tbl_user as u, tbl_role as r, tbl_permission as p, tbl_permission_role as pr, tbl_role_user as ru WHERE u.USER_ID = ru.USER_ID AND r.ROLE_ID = ru.ROLE_ID AND p.PERMISSION_ID = pr.PERMISSION_ID AND r.ROLE_ID = pr.ROLE_ID </sql> <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <select id="select-01" parameterClass="string" resultMap="result-map-01"> <include refid="select-base-01" /> AND u.USER_USERNAME = #username# </select> </sqlMap>
public interface UserDao { User findUserByUsername(String username); } @Repository("userDao") public class UserDaoImpl implements UserDao { @Resource private SqlMapClientTemplate sqlMapClientTemplate; @Override public User findUserByUsername(String username) { Validate.notEmpty(username, "用户名不可为null或empty string"); return (User) sqlMapClientTemplate.queryForObject("user.select-01", username); } }
(三) 用户和权限数据源是自己设计的,应该实现自己的Realm对象。
package com.ztgame.sd.security.realm; import java.util.HashSet; import java.util.Set; 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.realm.Realm; import org.apache.shiro.subject.PrincipalCollection; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; import com.ztgame.sd.dao.UserDao; import com.ztgame.sd.domain.Permission; import com.ztgame.sd.domain.Role; import com.ztgame.sd.domain.User; public class JdbcRealm extends AuthorizingRealm implements Realm, InitializingBean { private UserDao userDao; // ------------------------------------------------------------------------------------------------------------ @Override public void afterPropertiesSet() throws Exception { Assert.notNull(userDao); } // ------------------------------------------------------------------------------------------------------------ @Override public String getName() { return getClass().getName(); } @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String username = (String) super.getAvailablePrincipal(principals); User user = userDao.findUserByUsername(username); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); Set<String> roles = new HashSet<String>(); Set<String> permissions = new HashSet<String>(); for (Role role : user.getRoleSet()) { roles.add(role.getName()); for (Permission per : role.getPermissionSet()) { permissions.add(per.getName()); } } info.addRoles(roles); info.addStringPermissions(permissions); return info; } @Override protected AuthenticationInfo doGetAuthenticationInfo( AuthenticationToken token) throws AuthenticationException { SimpleAuthenticationInfo info = null; UsernamePasswordToken upt = (UsernamePasswordToken) token; String username = upt.getUsername(); User user = userDao.findUserByUsername(username); if (user == null) { throw new AuthenticationException(); } info = new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName()); return info; } // ------------------------------------------------------------------------------------------------------------ public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
(四) apache-shiro的配置
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- apache-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> <!-- 其他无关apache-shiro --> </web-app>
spring-shiro.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login" /> <property name="successUrl" value="/login/loginSuccessFull" /> <property name="unauthorizedUrl" value="/login/unauthorized" /> <!-- <property name="filterChainDefinitions"> <value> / = anon </value> </property> --> </bean> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="authenticator" ref="authenticator" /> <property name="sessionManager" ref="sessionManager" /> <property name="cacheManager" ref="cacheManager" /> <property name="realms"> <list> <bean class="com.ztgame.sd.security.realm.JdbcRealm"> <property name="userDao" ref="userDao" /> <property name="credentialsMatcher" ref="hashedCredentialsMatcher" /> </bean> </list> </property> </bean> <bean id="authenticator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator" /> <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> <property name="sessionDAO" ref="sessionDAO" /> </bean> <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager" /> <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.MemorySessionDAO" /> <bean id="hashedCredentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher"> <property name="hashAlgorithmName" value="MD5" /> <property name="storedCredentialsHexEncoded" value="true" /> <property name="hashIterations" value="1" /> </bean> </beans>
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"> <!-- 其他spring-mvc框架配置 --> <!-- 以下两个bean的配置是为了在Controller层使用元注释控制权限 如果使用spring-mvc一定要不要放在webroot的配置文件中 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" /> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager" /> </bean> </beans>
(五) jsp-taglib 支持
- <shiro:authenticated> 登录之后
- <shiro:notAuthenticated> 不在登录状态时
- <shiro:guest> 用户在没有RememberMe时
- <shiro:user> 用户在RememberMe时
- <shiro:hasAnyRoles name="abc,123" > 在有abc或者123角色时
- <shiro:hasRole name="abc"> 拥有角色abc
- <shiro:lacksRole name="abc"> 没有角色abc
- <shiro:hasPermission name="abc"> 拥有权限abc
- <shiro:lacksPermission name="abc"> 没有权限abc
- <shiro:principal> 显示用户登录名
[官方文档] http://shiro.apache.org/web.html#Web-taglibrary
(六) 默认过滤器(10个)
- anon -- org.apache.shiro.web.filter.authc.AnonymousFilter
- authc -- org.apache.shiro.web.filter.authc.FormAuthenticationFilter
- authcBasic -- org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
- perms -- org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
- port -- org.apache.shiro.web.filter.authz.PortFilter
- rest -- org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
- roles -- org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
- ssl -- org.apache.shiro.web.filter.authz.SslFilter
- user -- org.apache.shiro.web.filter.authc.UserFilter
- logout -- org.apache.shiro.web.filter.authc.LogoutFilter
anon:例子/admins/**=anon 没有参数,表示可以匿名使用。
authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数
roles:例子/admins/user/**=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/**=roles["admin,guest"],每个参数通过才算通过,相当于hasAllRoles()方法。
perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
rest:例子/admins/user/**=rest[user],根据请求的方法,相当于/admins/user/**=perms[user:method] ,其中method为post,get,delete等。
port:例子/admins/user/**=port[8081],当请求的url的端口不是8081是跳转到schemal://serverName:8081?queryString,其中schmal是协议http或https等,serverName是你访问的host,8081是url配置里port的端口,queryString是你访问的url里的?后面的参数。
authcBasic:例如/admins/user/**=authcBasic没有参数表示httpBasic认证
ssl:例子/admins/user/**=ssl没有参数,表示安全的url请求,协议为https
user:例如/admins/user/**=user没有参数表示必须存在用户,当登入操作时不做检查
[官方文档] http://shiro.apache.org/web.html#Web-FilterChainDefinitions
(七) 常用元注释
- @RequiresAuthentication 验证用户是否登录,等同于方法subject.isAuthenticated() 结果为true时
- @RequiresUser 验证用户是否被记忆,user有两种含义:一种是成功登录的(subject.isAuthenticated()结果为true)另外一种是被记忆的(subject.isRemembered()结果为true)
- @RequiresGuest 验证是否为匿名请求
- @RequiresRoles 必须要有角色
- @RequiresPermissions 必须要有权限
- shiro-demo.zip (48.3 KB)
- 下载次数: 654
- shiro-db.zip (7.8 KB)
- 下载次数: 378
- shiro-db-dump.zip (880 Bytes)
- 下载次数: 363
评论
13 楼
xiafengfeiwu
2016-06-24
[flash=200,200][url]
[/url][/flash]引用
12 楼
woshiweixiaobao
2015-01-28
yingzhuo这个用户的密码加密了,不知道密码怎么登陆?有注册的入口吗?
11 楼
popeyejc
2014-08-04
怎么运行啊
10 楼
zhaohaizh
2013-07-26
楼主写的真好,真正是高手,我最近正在学习shiro的使用,也出现了很多问题,如果能加你QQ聊聊就好了
9 楼
q474818917
2013-05-22
yingzhor 写道
q474818917 写道
我有个疑问:
我动态修改了该用户角色,怎么才能让haspermission重新获取新的permission
我动态修改了该用户角色,怎么才能让haspermission重新获取新的permission
删除那个用户的Session,让他不得不重新登录不就好了。
或者你看一下org.apache.shiro.session.mgt.eis.SessionDAO接口,他也提供了,updateSession方法,我没这么干过,我不知道这个能不能行。
我看了一下,它是用ehcache做缓存的,但是我getAuthorizationCache这个居然没取到Cache
,不知道怎么回事
8 楼
yingzhor
2013-05-22
q474818917 写道
我有个疑问:
我动态修改了该用户角色,怎么才能让haspermission重新获取新的permission
我动态修改了该用户角色,怎么才能让haspermission重新获取新的permission
删除那个用户的Session,让他不得不重新登录不就好了。
或者你看一下org.apache.shiro.session.mgt.eis.SessionDAO接口,他也提供了,updateSession方法,我没这么干过,我不知道这个能不能行。
7 楼
q474818917
2013-05-22
我有个疑问:
我动态修改了该用户角色,怎么才能让haspermission重新获取新的permission
我动态修改了该用户角色,怎么才能让haspermission重新获取新的permission
6 楼
青春的、脚步
2012-12-13
欢迎学习交流
5 楼
yingzhor
2012-11-08
没错。 我的Realm配置了加密器的。 MD5单向加密,你看spring-shior.xml就知道了。
注入了一个加密bean。
注入了一个加密bean。
4 楼
mistbow
2012-11-08
您好;请问一个问题:
上面这个是我的返回User的代码,然后我在web controller里这么调用:
为什么会报异常呢?
是不是密码需要加密返回啊?感谢
public User findUserByUsername(String username) { User user = new User(); user.setUsername("guo"); user.setPassword("aaa"); Set<Role> roleSet = new HashSet<Role>(); Role role = new Role(); role.setName("admin"); Set<Permission> permissionSet = new HashSet<Permission>(); Permission p = new Permission(); p.setName("CREATE"); permissionSet.add(p); role.setPermissionSet(permissionSet); roleSet.add(role); user.setRoleSet(roleSet); System.out.println(user.getPassword()); return user; }
上面这个是我的返回User的代码,然后我在web controller里这么调用:
UsernamePasswordToken upt = new UsernamePasswordToken("guo", "aaa"); Subject subject = SecurityUtils.getSubject(); subject.login(upt);
为什么会报异常呢?
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.shiro.authc.AuthenticationException: Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - guo, rememberMe=false]. Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException). org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
是不是密码需要加密返回啊?感谢
3 楼
mistbow
2012-11-07
yingzhor 写道
mistbow 写道
您好,可不可把您添加数据的sql也添加进来呢?感谢
已经上传了整个db的dump。
真快啊 感谢感谢 嘻嘻
2 楼
yingzhor
2012-11-07
mistbow 写道
您好,可不可把您添加数据的sql也添加进来呢?感谢
已经上传了整个db的dump。
1 楼
mistbow
2012-11-07
您好,可不可把您添加数据的sql也添加进来呢?感谢
发表评论
-
apache-shiro杂记(三) 用了apache-shiro后,HttpSession.getServletContext() API无法正常工作了
2014-01-09 09:14 7782用了apache-shiro以后,偶然发现servlet环境下 ... -
apache-shiro杂记(二) 关于多realm认证的策略
2013-12-29 13:36 16377一直以为给定的下面配置是短路方式的,即defaultJdbcR ... -
apache-shiro杂记(一) 统计在线用户数目
2012-10-31 10:10 9370org.apache.shiro.session.mgt.ei ...
相关推荐
这份"Shiro学习笔记"可能包含了以下主题: - Shiro的安装与配置 - Shiro基本概念详解 - Realm的创建与使用 - 登录与登出流程 - 权限控制机制 - 缓存管理和会话管理 - Shiro与Spring的整合 - Shiro的Filter链配置 - ...
Apache Shiro 是一款Java安全框架,它提供了身份认证、授权、加密和会话管理功能,适用于Java SE和Java EE环境,甚至能在分布式集群环境中运行。Shiro因其简单易用而受到青睐,相比于依赖Spring的Spring Security,...
本项目“learning-shiro”显然是一个关于 Apache Shiro 的学习资源集合,包含了作者在学习过程中积累的笔记和示例代码。下面将详细探讨 Shiro 的核心概念以及如何使用它来实现应用安全。 1. **认证(Authentication...
本学习笔记主要涵盖了如何在Spring Boot项目中整合Shiro,并实现用户认证和授权,以及图片验证码的实现。 **1. Shiro 概述** Shiro 的核心组件包括 Realm(域)、Subject(当前操作用户)、Session Manager(会话...
尽管这份"shiro学习笔记0.0.0.0"可能内容不多,但通过它,你可以对 Shiro 有个初步的认识,为进一步深入学习打下基础。在实际项目中,根据需求选择合适的 Shiro 组件和配置,可以有效地提升应用的安全性。
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出...通过深入学习 "Shiro课堂笔记",我们可以更好地理解和运用 Shiro 的各种功能,提升我们的安全编程能力。
- **shiro资料笔记与核心单词**:用户的学习笔记,可能涵盖了关键概念和常用API,是学习Shiro的好帮手。 在实际应用中,Shiro可以通过简单的配置实现用户的登录、权限检查、会话管理等功能。通过 Realm,我们可以...
【SpringBoot与Shiro整合-权限管理实战】的课程主要关注如何将Spring Boot与Apache Shiro框架结合起来,实现高效的安全管理。Spring Boot是Spring框架的一个简化版本,旨在提高开发效率,减少配置工作,同时提供了很...
在本文中,我们将探讨如何将Spring Boot与Apache Shiro框架整合,以实现高效且灵活的权限管理系统。首先,我们需要了解这两个框架的基本概念。 **Spring Boot框架简介** Spring Boot是Spring框架的一个扩展,旨在...
总的来说,这个压缩包提供的资源为学习和掌握Apache Shiro提供了一个全方位的平台,从基础理论到实战演练,覆盖了Shiro学习的全过程。对于想要提升安全开发技能或者正在使用或考虑使用Shiro的人来说,这是一个宝贵的...
1. **引入依赖**: 首先,我们需要下载Shiro的JAR包,包括核心库(`org.apache.shiro:shiro-core`)、Web支持(`org.apache.shiro:shiro-web`)以及可能需要的其他模块,如缓存管理(`org.apache.shiro:shiro-ehcache...
Apache Shiro 是一个强大且易用的 Java 安全框架,提供身份认证、授权、加密以及会话管理功能,简化了开发者在应用安全方面的开发工作。这个"shiro实战教程资料.zip"压缩包包含了多个与 Shiro 相关的学习资源,帮助...
**shiro笔记.xlsx**:这份文档可能是用户或教程作者整理的Shiro学习笔记,涵盖了Shiro的使用方法、实例和常见问题。通过阅读这份笔记,你可以快速了解Shiro的实际应用和解决常见问题的策略。 **shiro.xmind**:这是...
Spring Boot和Apache Shiro都是流行的Java框架,分别用于简化Spring应用程序开发和提供安全管理功能。本课程深入探讨了如何将这两个强大的工具结合,以构建一个完整的用户权限管理系统。 首先,Spring Boot是Spring...
这部分可能需要用到Spring Security或Apache Shiro进行权限管理,确保用户的安全性。 2. 商品管理:商品的发布、查询、分类、详情展示等功能。商品信息通常会存储在数据库中,MyBatis可以用来执行SQL语句,进行CRUD...
在这个"Shiro入门"压缩包中,包含了笔记和源码,是学习Shiro基础知识的好资源。 **一、Shiro基本概念** 1. **认证**:也称为身份验证,是确认用户身份的过程,通常通过用户名和密码进行验证。 2. **授权**:也称为...