[Shiro] --- spring consistency shiro

Based on the ssm framework, shiro is integrated into it.

 

Add shiro 's jar package support to spring 's pom :

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-core</artifactId>

<version>1.2.4</version>

</dependency>

 

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.7.12</version>

</dependency>

 

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-web</artifactId>

<version>1.2.4</version>

</dependency>

 

<dependency>

<groupId>org.apache.shiro</groupId>

<artifactId>shiro-spring</artifactId>

<version>1.2.4</version>

</dependency>

 

 

Add the configuration of shiro to the spring configuration file (spring.xml or application.xml):

<!-- Custom Realm -->

<bean id="myRealm" class="com.java1234.realm.MyRealm"/> 

 

<!-- Security Manager -->

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 

            <property name="realm" ref="myRealm"/> 

</bean> 

 

<!-- Shiro filter -->

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 

    <!-- Shiro 's core security interface , this attribute is required --> 

    <property name="securityManager" ref="securityManager"/>

    <!-- If authentication fails, jump to the configuration of the login page --> 

    <property name="loginUrl" value="/index.jsp"/>

    <!-- If permission authentication fails, jump to the specified page --> 

    <property name="unauthorizedUrl" value="/unauthor.jsp"/> 

    <!-- Shiro连接约束配置,即过滤链的定义 --> 

    <property name="filterChainDefinitions"> 

        <value> 

             /login=anon

/admin*=authc

/student=roles[teacher]

/teacher=perms["user:create"]

        </value> 

    </property>

</bean> 

 

<!-- 保证实现了Shiro内部lifecycle函数的bean执行 --> 

<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> 

 

<!-- 开启Shiro注解 -->

<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> 

 

 

在web.xml中添加shiro过滤器:

<!-- shiro过滤器定义 -->

<filter>

<filter-name>shiroFilter</filter-name>

<filter-class>

org.springframework.web.filter.DelegatingFilterProxy

</filter-class>

<init-param>

<!-- 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理 -->

<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>

 

 

自定义realm类:

public class MyRealm extends AuthorizingRealm{

 

@Resource

private UserService userService;

 

/**

 * 为当限前登录的用户授予角色和权限

 */

@Override

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

String userName=(String)principals.getPrimaryPrincipal();

SimpleAuthorizationInfo authorizationInfo=new SimpleAuthorizationInfo();

authorizationInfo.setRoles(userService.getRoles(userName));

authorizationInfo.setStringPermissions(userService.getPermissions(userName));

return authorizationInfo;

}

 

/**

 * 验证当前登录的用户

 */

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

String userName=(String)token.getPrincipal();

User user=userService.getByUserName(userName);

if(user!=null){

AuthenticationInfo authcInfo=new SimpleAuthenticationInfo(user.getUserName(),user.getPassword(),"xx");

return authcInfo;

}else{

return null;                                

}

}

 

}

 

对应的controller:

 

/**

 * 用户Controller

 * @author Administrator

 *

 */

@Controller

@RequestMapping("/user")

public class UserController {

/**

 * 用户登录

 * @param user

 * @param request

 * @return

 */

@RequestMapping("/login")

public String login(User user,HttpServletRequest request){

Subject subject=SecurityUtils.getSubject();

UsernamePasswordToken token=new UsernamePasswordToken(user.getUserName(), user.getPassword());

try{

subject.login(token);

Session session=subject.getSession();

System.out.println("sessionId:"+session.getId());

System.out.println("sessionHost:"+session.getHost());

System.out.println("sessionTimeout:"+session.getTimeout());

session.setAttribute("info", "session的数据");

return "redirect:/success.jsp";

}catch(Exception e){

e.printStackTrace();

request.setAttribute("user", user);

request.setAttribute("errorMsg", "用户名或密码错误!");

return "index";

}

}

 

 

}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325635434&siteId=291194637