srping security

本文介绍如何配置 Spring Security 进行用户认证与授权,包括解决登录时出现的404问题,读取用户信息的方法,以及如何在页面上进行权限判断。同时提供了 applicationContext-security.xml 的详细配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果出现一个帐户登录老出现404,要加上always-use-default-target='true'

如<form-login login-page="/login.jsp"  authentication-failure-url="/login.jsp?error=true"   default-target-url="/login.action" always-use-default-target='true'/>



读用户信息:

public UserInfo getUserInfo() {
  SecurityContext securityContext = (SecurityContext) getRequest()
    .getSession().getAttribute("SPRING_SECURITY_CONTEXT");
  UserInfo userInfo = null;
  if (securityContext != null) {
   userInfo = (UserInfo) securityContext.getAuthentication().getPrincipal();   
  }  
  return userInfo;
 }


页面上读用户信息:

<%
 SecurityContext securityContext = (SecurityContext) session
   .getAttribute("SPRING_SECURITY_CONTEXT");
    UserInfo userInfo = null;
 if (securityContext != null) {
  userInfo = (UserInfo) securityContext.getAuthentication()
    .getPrincipal();
 }
%>

页面判断权限:

<%@ taglib prefix='security'
 uri='http://www.springframework.org/security/tags'%>

<security:authorize ifAnyGranted="ROLE_OWNER">


service层:

public class UserDetailLogic implements UserDetailsService{

 @Override
 public UserDetails loadUserByUsername(String username)
   throws UsernameNotFoundException, DataAccessException {
  
  UserInfo userInfo = userDao.findUnique("from UserInfo e where e.userName = ?", username);
  return userInfo;
 }

}


applicatonContext-security.xml

<?xml version="1.0" encoding="UTF-8"?>

    <b:beans xmlns="http://www.springframework.org/schema/security
     xmlns:b="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 
        http://www.springframework.org/schema/security  
        http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 
     
     <http auto-config="true" access-denied-page="/accessDenied.jsp"> 
      <!-- 不要过滤图片等静态资源,其中**代表可以跨越目录,*不可以跨越目录。 --> 
      <intercept-url pattern="/**/*.jpg" filters="none" /> 
      <intercept-url pattern="/**/*.png" filters="none" /> 
      <intercept-url pattern="/**/*.gif" filters="none" /> 
      <intercept-url pattern="/**/*.css" filters="none" /> 
      <intercept-url pattern="/**/*.js" filters="none" /> 
     
      <!-- 设置访问权限start -->
      <intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER" />
      <!-- 设置访问权限end -->
     
      <!-- 登录页面和忘记密码页面不过滤 --> 
      <intercept-url pattern="/login.*" filters="none" /> 
      <intercept-url pattern="/index.action" filters="none" /> 
      <form-login login-page="/login.jsp"  authentication-failure-url="/login.jsp?error=true"   default-target-url="/login.action" always-use-default-target='true'/> 
      <logout logout-success-url="/login.jsp"/>
      <!-- 检测失效的sessionId,超时时定位到另外一个URL --> 
      <session-management invalid-session-url="/login.jsp" />
       
     </http> 
     
     <authentication-manager>
   <!--<authentication-provider>
         <user-service>
    <user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
    <user name="user" password="user" authorities="ROLE_USER" />
   </user-service>
  </authentication-provider>-->
          <authentication-provider user-service-ref="userDetailLogic">
                <password-encoder hash="md5"/>
          </authentication-provider> 
     </authentication-manager> 
     
    </b:beans> 



User:

public class UserInfo implements Cloneable,UserDetails{

@Override
 public Object clone() throws CloneNotSupportedException {
  return super.clone();
 }

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值