spring 통합 shiro
8663 단어 shiro
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
applicationContext-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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-lazy-init="true">
<description>Shiro </description>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- -->
<property name="realm" ref="shiroAuthRealm" />
<!-- Session -->
<property name="sessionManager" ref="sessionManager" />
<!-- -->
<property name="cacheManager" ref="shiroCacheManager" />
</bean>
<!-- Session -->
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<!-- -->
<property name="globalSessionTimeout" value="1800000" />
<!-- Session -->
<property name="sessionDAO" ref="shiroSessionDao" />
<!-- SessionIdCookie -->
<property name="sessionIdCookie" ref="sharesession" />
<!-- Session -->
<property name="sessionValidationSchedulerEnabled" value="true" />
</bean>
<!-- SessionIdCookie -->
<bean id="sharesession" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg name="name" value="SHAREJSESSIONID" />
<property name="path" value="/" />
</bean>
<!-- Session -->
<bean id="shiroSessionDao" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO" />
<!-- Session -->
<bean id="shiroCacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
<!-- -->
<bean id="shiroAuthRealm" class="web.service.ShiroAuthRealm">
<!-- shiroAuthService -->
<property name="shiroAuthService" ref="shiroAuthService" />
</bean>
<!-- ShiroFilter -->
<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/main.do" />
<!-- Shiro , -->
<!-- http://blog.csdn.net/jadyer/article/details/12172839 -->
<!-- value '/' HttpServletRequest.getContextPath() -->
<!-- anon: , , .do .jsp * , login.jsp?main -->
<!-- authc: , Shiro org.apache.shiro.web.filter.authc.FormAuthenticationFilter -->
<property name="filterChainDefinitions">
<value>
/commons/css/** = anon
/commons/images/** = anon
/commons/js/** = anon
/regist/** = anon
/login = authc
/logout = logout
/** = user
</value>
</property>
</bean>
<!-- Shiro lifecycle bean -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
<bean id="formAuthenticationFilter" class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter"/>
</beans>
사용자 정의 Realm 클래스:
public class ShiroAuthRealm extends AuthorizingRealm {
/**
* 현재 로그 인 한 Subject 에 게 캐릭터 와 권한 부여
* @see 테스트 결과: 이 예 에서 이 방법의 호출 시 기 는 권한 을 부여 해 야 하 는 자원 에 접근 할 때 입 니 다.
* @see 테스트 결과: 권한 수여 자원 에 접근 할 때마다 이 방법의 논 리 를 실행 합 니 다. 이 는 이 예 에서 AuthorizationCache 를 기본적으로 사용 하지 않 았 음 을 나타 냅 니 다.
* @see
Spring 3.1 부터 제공 되 는 Concurrent MapCache 지원 을 사용 하면 AuthorizationCache 사용 여 부 를 유연 하 게 결정 할 수 있 을 것 같 습 니 다.
* @see 예 를 들 어 데이터베이스 에서 권한 정 보 를 가 져 올 때 Shior 가 제공 하 는 AuthorizationCache 대신 Spring 3.1 에서 제공 하 는 캐 시 를 방문 합 니 다.
*/
private ShiroAuthService shiroAuthService;
public ShiroAuthService getShiroAuthService() {
return shiroAuthService;
}
public void setShiroAuthService(ShiroAuthService shiroAuthService) {
this.shiroAuthService = shiroAuthService;
}
/**
*
* 리 셋 함수 인증, 로그 인 시 호출.
*
*/
/ / 여 기 는 죽은 인증 입 니 다. 실제 적 으로 admin 두 개 를 데이터베이스 에서 조회 하 는 admin 으로 교체 해 야 합 니 다.
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken authcToken) throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
String userName = token.getUsername();
String password = String.valueOf(token.getPassword());
if (userName.equals("admin") && password.equals("admin")) {
return new SimpleAuthenticationInfo(new ShiroUser("1", userName,
"cuijianbo"), password, "cuijianbo");
} else {
return null;
}
}
/**
* 권한 부여 조회 리 셋 함수, 인증 을 진행 하지만 캐 시 에 사용자 의 권한 수여 정보 가 없 을 때 호출 합 니 다.
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
ShiroUser shiroUser = (ShiroUser) principals.getPrimaryPrincipal();
String username = shiroUser.getLoginName();
if (username != null) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addStringPermission("add");
info.addStringPermission("del");
info.addStringPermission("edit");
info.addStringPermission("view");
return info;
}
return null;
}
/**
*
* Authentication 대상 을 사용자 정의 하여 Subject 는 사용자 의 로그 인 이름 외 에 더 많은 정 보 를 휴대 할 수 있 습 니 다.
*
*/
public class ShiroUser implements Serializable {
private static final long serialVersionUID = -1373760761780840081L;
public String userid;
public String loginName;
public String name;
public ShiroUser(String userid, String loginName, String name) {
this.userid = userid;
this.loginName = loginName;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
shiro 권한 부여Shiro 는 세 가지 방식 의 인증 을 지원 합 니 다. 본 교육 프로그램 은 첫 번 째 프로 그래 밍 방식 을 사용 하고 실제 와 웹 시스템 을 통합 하여 사용 한 후 두 가지 방식 을 사용 하도록 권한 을 부여...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.