セキュリティのために春基本認証を使用するアプリケーションがあります。アプリケーションはSpring MVC上に構築されていません。我々は、フロントエンドとしてポリマーを使用しており、残りのものとしてサービスを公開しています。Javascriptのスプリング基本認証資格情報
要件は、送信フォームのボタンをクリックすると、ユーザー名/パスワードを投稿する必要があるjavascriptを呼び出す必要があります。
javascriptから基本認証サーブレットを取得するための資格証明を渡す方法があるため、リクエストを検証します。認証を実行するためにAuthenticationProvider認証を実装しました。
認証Javaコード
import org.springframework.security.authentication.*;
import org.springframework.security.core.*;
import java.util.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import com.lifesciencemeta.ls.User;
import com.lifesciencemeta.ls.LifeScienceServiceMaster;
import com.lifesciencemeta.ls.LifeScienceConstants;
public class SpringBasicAuthentication implements AuthenticationProvider {
public LifeScienceServiceMaster lifeScienceService;
@Context
UriInfo lsUri;
public LifeScienceServiceMaster getLifeScienceService() {
return lifeScienceService;
}
public void setLifeScienceService(LifeScienceServiceMaster lifeScienceService) {
this.lifeScienceService = lifeScienceService;
}
@Override
public Authentication authenticate(Authentication authentication)
throws AuthenticationException {
UsernamePasswordAuthenticationToken auth = (UsernamePasswordAuthenticationToken) authentication;
String principal = (String) auth.getPrincipal();
String credential = (String) auth.getCredentials();
User u = lifeScienceService.authenticateUser(principal, credential);
if (u == null)
throw new BadCredentialsException(LifeScienceConstants.getMsg(“Auth Failed"));
else {
List<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>();
String role = u.getRole().getName();
if(role == null) {
throw new BadCredentialsException(LifeScienceConstants.getMsg(“Auth Failed"));
}
grantedAuths.add(new SimpleGrantedAuthority(role));
UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(
principal, credential, grantedAuths);
result.setDetails(u);
return result;
}
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
}
のWeb.xml
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd」 ID = "WebApp_ID"バージョン= "2.5"> org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/context.xml springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain / ジャージーRESTサービス com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property .packages com.lifesciencemeta.ls.restService.Invoke com.sun.jersey.api.json.POJOMappingFeature 真 ジャージーRESTサービス /休憩/
のsecurity.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:security="http://www.springframework.org/schema/security"
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/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<security:global-method-security secured-annotations="enabled" jsr250-annotations="enabled" pre-post-annotations="enabled" />
<security:http>
<security:intercept-url pattern="/**" access="ROLE_USER, ROLE_ADMIN"/>
<security:http-basic />
</security:http>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="SpringBasicAuthentication" />
</security:authentication-manager>
<bean id="SpringBasicAuthentication"
class="com.lifesciencemeta.ls.SpringBasicAuthentication" >
<property name="lifeScienceService" ref="lsLifeScienceServiceImpl"/>
</bean>
</beans>
あなたはSpring Securityを使用しています。 endopointはそのようなタスクの/ loginです。 – Nano
ありがとうございました! –